将控件添加到用户控件时出错

时间:2010-10-27 16:12:53

标签: asp.net user-controls code-behind

我正在尝试在用户控件中添加控件:

        LinkButton l = new LinkButton();
        l.Text = "Test";
        l.OnClientClick = "TestClick";
        l.ID = "TestID";
        l.Page = Page;
        Page.Controls.Add(l);

页面加载时出现此错误:

  

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

     

[InvalidOperationException:Collection已被修改;枚举操作可能无法执行。]      System.Web.UI.ControlCollectionEnumerator.MoveNext()+ 8677726      System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children)+217      System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)+8      System.Web.UI.Page.Render(HtmlTextWriter writer)+29      System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter)+27      System.Web.UI.Control.RenderControl(HtmlTextWriter writer,ControlAdapter adapter)+100      System.Web.UI.Control.RenderControl(HtmlTextWriter writer)+25      System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+3060“

当我在自定义Web用户控件中时,我是不是不允许通过代码隐藏向页面添加控件?如果我不添加此控件,则不会发生错误。

3 个答案:

答案 0 :(得分:2)

这是因为您要将其添加到PAGE中的控件而不是用户控件...

当页面初始化其控件时,将从页面调用您的代码,显然此时您将无法向页面的现有(部分初始化)控件树添加其他控件...

此外,将控件添加到用户控件总是谨慎,而不是使用页面中的控件,因为您不知道哪个页面最终可能会使用您的控件。

试试这个:

 this.Controls.Add(l)

答案 1 :(得分:2)

您需要确保在page's life cyclePreInit阶段添加控件。基本上,一旦引发Init事件,您就不应该修改页面控件集合中的控件。

答案 2 :(得分:1)

据我所知,如果你想动态添加控件,你需要使用PlaceHolder控件

More info here