Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将控件添加到用户控件时出错_Asp.net_User Controls_Code Behind - Fatal编程技术网

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
事件,您不应该修改页面控件集合中的控件。

占位符将有助于确定控件的呈现位置。但是,在页面的生命周期中添加控件太迟将不安全。占位符将有助于确定控件的呈现位置。这不会带来任何问题在页面的生命周期中添加控件太晚了,这是安全的。