如何使用 runat="server" 删除控件在 asp.net 中指定

发布于 2024-12-06 23:36:36 字数 993 浏览 0 评论 0 原文

我有一个带有服务器可访问控件的网页,请参阅下面的“FileIconLink”:

<body>
    <p class="FirstTitle style5">Downloads:</p>
    <div id="BreadcrumbDiv">
        <p style="padding-left:5px; ">Page Loading...</p>
    </div><!--/BreadcrumbDiv-->
    <div id="DirLinksDiv">
        <p><span class="SecondTitle">Files:</span></p>
            <a runat="server" href="#" id="FileIconLink">File</a>
            <% WriteFileLinks(); %>
        <p><span class="SecondTitle">Folders:</span></p>
            <a runat="server" href="#" id="FolderIconLink">Folder</a>
    </div><!--/DirLinksDiv-->
</body>
<%RemoveHTMLTemplates(); %>

“FileIconLink”和“FolderIconLink”都是由我的代码复制的 Web 控件的模板 - 例如 <% WriteFileLinks(); %> 上面。如何在服务器上运行时从网页中永久删除这些模板而不导致错误:

无法修改控件集合,因为控件包含代码块(即 <% ... %>) .

提前致谢!

I have a webpage with server accessible controls, see 'FileIconLink' below:

<body>
    <p class="FirstTitle style5">Downloads:</p>
    <div id="BreadcrumbDiv">
        <p style="padding-left:5px; ">Page Loading...</p>
    </div><!--/BreadcrumbDiv-->
    <div id="DirLinksDiv">
        <p><span class="SecondTitle">Files:</span></p>
            <a runat="server" href="#" id="FileIconLink">File</a>
            <% WriteFileLinks(); %>
        <p><span class="SecondTitle">Folders:</span></p>
            <a runat="server" href="#" id="FolderIconLink">Folder</a>
    </div><!--/DirLinksDiv-->
</body>
<%RemoveHTMLTemplates(); %>

Both 'FileIconLink' and 'FolderIconLink' are templates of web controls which are copied by my code - such as <% WriteFileLinks(); %> above. How could these templates be permanently removed from the web page at run-time on the server without causing the error:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

伤痕我心 2024-12-13 23:36:36

这是因为您有 <% %>在您尝试更改的控件内。而不是使用 <% %>在 aspx 页面中,我会修改后面的代码以向 div 添加文字控件或其他内容,例如:

DirLinks.Controls.Add(new LiteralControl(WriteFile()));

然后您应该能够从后面的代码修改您的控件。

This is because you have <% %> inside the control you're trying to change. Instead of using <% %> in the aspx page, I would modify the code behind to add a literal control or something to the div, like:

DirLinks.Controls.Add(new LiteralControl(WriteFile()));

You should then be able to modify your control form the code behind.

寂寞花火° 2024-12-13 23:36:36

您的内联代码在渲染期间执行。

但您可能想在加载期间删除模板。

这意味着这两种技术是冲突的。

Your inline code is executed during render.

But you probably want to get rid of the templates during Load.

Which means that the two techniques conflict.

妄断弥空 2024-12-13 23:36:36

最终我意识到我的方法是错误的,正如 Cade Roux 所暗示的那样,我需要决定在哪里使用模板。

我的解决方案如下:

  • 制作控件来包含我的(以前内联的)代码的结果。
  • 使用 Page_Load 中的模板来填充上述控件。
  • 删除Page_Load中的模板。
  • 不做任何内联操作。

Ultimately I realised my approach was wrong, as Cade Roux was alluding to, I needed to make up my mind where the templates were going to be used.

My solution was as follows:

  • Make controls for containing the results of my (previously inline) code.
  • Use templates in Page_Load to fill the controls described above.
  • Delete templates in Page_Load.
  • Do nothing inline.
软甜啾 2024-12-13 23:36:36

Page 对象除了 Page_Load 函数外还有另一个函数 Page_PreRender,该函数在 Page_Load 之前执行。因此,请尝试删除此 Page_PreRender 函数中的逻辑。
请参考此链接 http://msdn.microsoft .com/en-us/library/system.web.ui.control.prerender.aspx

The Page object has another function apart from Page_Load function called Page_PreRender, this function gets executed before Page_Load. So please try remove logic in this Page_PreRender function.
Please refer this link http://msdn.microsoft.com/en-us/library/system.web.ui.control.prerender.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文