Asp.net 将控件添加到用户控件时出错
我正在尝试在用户控件中添加控件:Asp.net 将控件添加到用户控件时出错,asp.net,user-controls,code-behind,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请求期间生成了未经处理的异常。有关异常的起源和位置
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编写器,ICollection子对象)+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编写器、控制适配器)+100
System.Web.UI.Control.RenderControl(HtmlTextWriter)+25
System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+3060“
当我在自定义web用户控件中时,是否不允许我通过代码隐藏向页面添加控件?如果我不在中添加此控件,则不会发生错误。这是因为您正在将其添加到页面中的控件,而不是用户控件中 当页面初始化其控件时,您的代码将从页面中调用,显然此时您将无法向页面的现有(部分初始化)控件树中添加其他控件 此外,只在用户控件中添加控件比使用页面中的控件更为谨慎,因为您不知道哪个页面可能会使用您的控件 试试这个:
this.Controls.Add(l)
这是因为您正在将其添加到页面中的控件,而不是用户控件中 当页面初始化其控件时,您的代码将从页面中调用,显然此时您将无法向页面的现有(部分初始化)控件树中添加其他控件 此外,只在用户控件中添加控件比使用页面中的控件更为谨慎,因为您不知道哪个页面可能会使用您的控件 试试这个:
this.Controls.Add(l)
据我所知,如果要动态添加控件,则需要使用占位符控件
据我所知,如果要动态添加控件,则需要使用占位符控件
您需要确保在的
PreInit
阶段添加控件。基本上,一旦引发Init
事件,就不应该修改页面控件集合中的控件。您需要确保在的PreInit
阶段添加控件。基本上,一次引发了Init
事件,您不应该修改页面控件集合中的控件。占位符将有助于确定控件的呈现位置。但是,在页面的生命周期中添加控件太迟将不安全。占位符将有助于确定控件的呈现位置。这不会带来任何问题在页面的生命周期中添加控件太晚了,这是安全的。