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

jac*_*ack 55 c#

我试图在C#中创建动态元标记,但它给出以下错误:

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

这是我添加的代码:

HtmlMeta meta = new HtmlMeta();
meta.Name = "keywords";
meta.Content = "book,paper";
Page.Header.Controls.Add(meta);
Run Code Online (Sandbox Code Playgroud)

非常感谢你.

Joe*_*ler 171

很难说清楚,因为你没有包含很多细节,但我认为发生的事情是<% ... %>你的内部有代码块Page.Header(指的是<head runat="server">- 可能在母版页中).因此,当您尝试将项添加到该控件的Controls集合时,您将在此问题的标题中收到错误消息.

如果我是对的,那么解决方法是<asp:placeholder runat="server"><% ... %>代码块周围包装一个标记.这使得代码块成为占位符控件的子代,而不是控件的直接子代Page.Header,但它根本不会更改呈现的输出.既然代码块不是Page.Header你的直接子代,你可以添加东西到标题的控件集合而不会出错.

同样,某处有一个代码块,或者你不会看到这个错误.如果它不在您的aspx页面中,那么我看的第一个地方是MasterPageFile您的aspx顶部属性引用的文件.

  • 哇谢谢你.多年来,我一直在网络形态中反对这个问题,并且有大量的hacky解决方法.占位符工作得很好,而且我的其他解决方案也没有那么难看. (6认同)
  • 解决了它,我应该给你买啤酒(或九). (3认同)
  • 感谢它的工作,我用它工作的其他占位符包装了我的CSS内容。 (2认同)
  • 谢谢,今天让我头疼不已. (2认同)

Örv*_*var 14

如果您使用的是Telerik组件,并且在javascript中有<%= ....%>的引用,请使用RadScriptBlock包装脚本标记.

 <telerik:RadScriptBlock ID="radSript1" runat="server">
   <script type="text/javascript">
        //Your javascript
   </script>
</telerik>
Run Code Online (Sandbox Code Playgroud)

关心Örvar