2010-10-27 53 views
0

我想在添加控件的用户控件中:错误添加控件的用户控件时

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

我得到这个错误页面加载时:

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

[InvalidOperationException:集合被修改;枚举操作可能不会执行。] System.Web.UI.ControlCollectionEnumerator.MoveNext()+8677726 System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,ICollection children)+217 System.Web.UI.Control.RenderChildren (HtmlTextWriter作家)+8 System.Web.UI.Page.Render(HtmlTextWriter作家)+29 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter作家,ControlAdapter适配器)+27 System.Web.UI.Control。 RenderControl(HtmlTextWriter的作家的ControlAdapter适配器)+100 System.Web.UI.Control.RenderControl(HtmlTextWriter的作家)+25 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)3060"

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

回答

2

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

+0

+1忘记PreInit位。 – 2010-10-27 16:38:45

2

这是因为你的页面,而不是到您的用户控件将其添加到控制...

您的代码将被称为从页面开始,当页面正在初始化它的控件时,显然在那时你不能够对页面的现有(部分初始化)控件树添加额外的控制...

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

试试这个:

this.Controls.Add(l) 
1

据我知道你需要使用一个占位符控件,如果你想添加控件动态

More info here

+1

占位符将有助于确定呈现控件的位置。但是,在页面的生命周期中,不会太安全地添加控件。 – jball 2010-10-27 16:25:19