【问题标题】:“The Controls collection cannot be modified because the control contains code blocks”“控件集合无法修改,因为控件包含代码块”
【发布时间】:2016-05-24 12:01:30
【问题描述】:

在尝试使用以下代码块在我的页面中插入控件时,我遇到了这个异常

无法修改 Controls 集合,因为该控件 包含代码块

Literal lite=new Literal();
lite.Text = @"<div class='cookieLaw_slidesharey'><a id='cookieLaw_slideshare' href='#'><img src='/img/content/cookielaw_slideshare.jpg'/></a></div>";
Control control = this.FindControl("PlaceHolder");
control.Controls.AddAt(0,lite);

我尝试遵循此线程中的建议:

"The Controls collection cannot be modified because the control contains code blocks"

基本上是:

&lt;%= %&gt; 替换为&lt;%# %&gt;

并添加

Page.Header.Databind()在页面加载

但我得到以下异常:

对象引用未设置为对象的实例。

感谢您的帮助。

PS:我使用的是 .NET 3.5

【问题讨论】:

    标签: asp.net webforms


    【解决方案1】:

    检查您的“PlaceHolder”是否具有runat=server 属性。那应该已经有帮助了。您可以通过它的 id 来处理该控件,而不是使用 FindControl。

    Page.Header.Databind() 不起作用的原因可能是因为您没有像您复制的示例中那样带有 runat=server 的 head 部分。他们在那里的标题中添加了控件,这可能会略有不同。

    【讨论】:

    • 将 runat 服务器添加到标头解决了问题,但我在 之间的所有 C# 变量都不再被识别...
    • 刚刚发现我的错误。整个页面只有一个占位符。我试图在 Head 中添加一个,在 body 中添加一个,它突然起作用了
    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多