动态添加用户控件的元素时未初始化?

问题描述:

我已经建立了一个自定义的ASP.Net网页用户控件;这之前做了足够多的时间,但这一个是行为不端,我不明白为什么。动态添加用户控件的元素时未初始化?

如果调用页面直接在其标记中包含用户控件,则一切正常,并且控件的行为与预期相同。

但是,如果页面动态添加此特定控件(对于母版页中的占位符,这就是所谓的整个事情),其中的元素保持为NULL - 用户控件中的任何内容都不会写入客户端包括用户控件中的静态内容。

我可能会在哪里出错?

+0

你确定你的.ascx路径是否正确(是否相对)? – Jeroen 2010-07-01 01:16:42

答案排序 - ID是微不足道的,它也离不开谁,但如果你

Control a = new Control; 

这是行不通的,而

Control a = (Control)Page.LoadControl("~/Folder/Control.ascx"); 

做工作,这就是我想在深夜忘记:-)

当您动态添加用户控件时,必须为每个添加的控件生成唯一ID。

例如:

Control selWebControl = (Control)Page.LoadControl("~/DL/Templates/FileLibrary.ascx"); 
selWebControl.ID = "UC" + "_" + dfRow.ID; 
+0

我不必生成一个ID--我确信自动生成的默认值足够好,而且我确认这没什么区别。尽管你已经提醒我需要使用LoadControl,并且_that_解决了这个问题:-) – eftpotrm 2010-07-01 06:56:48

确保你将它添加到控件集合在页面上,并确保你在页面生命周期正确的时间做这件事。我喜欢重写CreateChildControls。

所以请确保你正在做Page.Controls.Add(myNewControl)或PlaceHolder1.Controls.Add(myNewControl)。

可能会帮助,如果你表现出的代码中,你是动态创建控件并将其添加到页面

当你动态加载的用户控件...

对于ASP.NET网站项目,下面的作品

Control a = new Control; 

对于ASP.NET Web应用程序项目,下面的作品

Control a = (Control)Page.LoadControl("~/Folder/Control.ascx");