我正在尝试在用户控件中添加控件:
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用户控件中时,我是不是不允许通过代码隐藏向页面添加控件?如果我不添加此控件,则不会发生错误。
答案 0 :(得分:2)
这是因为您要将其添加到PAGE中的控件而不是用户控件...
当页面初始化其控件时,将从页面调用您的代码,显然此时您将无法向页面的现有(部分初始化)控件树添加其他控件...
此外,将控件添加到用户控件总是谨慎,而不是使用页面中的控件,因为您不知道哪个页面最终可能会使用您的控件。
试试这个:
this.Controls.Add(l)
答案 1 :(得分:2)
您需要确保在page's life cycle的PreInit
阶段添加控件。基本上,一旦引发Init
事件,您就不应该修改页面控件集合中的控件。
答案 2 :(得分:1)
据我所知,如果你想动态添加控件,你需要使用PlaceHolder控件