【发布时间】:2011-01-17 13:14:55
【问题描述】:
我很难将具有自定义用户控件的页面直接修改为 ASPX 页面,现在只需要在需要时动态加载它。用户控件通过 ASCX 文件确实有 html 和其他控件,并且在代码隐藏中有代码。
我已经阅读了多个页面,发现我不能直接实例化用户控件,但应该使用Page.LoadControl(...)。问题不在于编译,而是当页面加载控件时,ASCX 中的所有控件都为空,然后崩溃。
如何使用在 ASCX 和代码隐藏中动态包含代码的用户控件?
编辑:
我在(PageLoad 或 PagePreRender 或 PagePreInit)中所做的示例
Control c = LoadControl(typeof(MyControl), null);
myControl= (MyControl)c;
myControl.ID = "123";
myControl.Visible = false;
Controls.Add(myControl);
MyControl 确实有例如 <div id="whatever" runat="server">... 并且在 MyControl 内部它将可见性设置为 True 或 False...但是当它这样做时,现在它崩溃了,因为“whatever” div 为 NULL。
【问题讨论】:
-
你能发布你用来加载用户控件的代码吗?是通过 ajax 加载控件还是在整个页面加载时加载?
-
Page.LoadControl()适合我。在处理哪个事件(Page.Init、Page.Load等)时,您会加载它吗? -
页面加载和页面预渲染的行为与在 ASCX 用户控制文件中声明的 NULL 对象上的崩溃行为相同
-
我测试了你的代码,我也得到了 null 但是当我在我的答案中使用代码时它工作正常。
-
我会尝试用路径而不是像你那样的类型来加载控制
标签: asp.net dynamic webforms user-controls