要动态添加的ASP.NET自定义用户控件

要动态添加的ASP.NET自定义用户控件,asp.net,dynamic,webforms,user-controls,Asp.net,Dynamic,Webforms,User Controls,我很难将一个有自定义用户控件的页面直接修改到ASPX页面,现在只需要在需要时动态加载它。用户控件通过ASCX文件具有html和其他控件,并且代码中包含代码 我阅读了多个页面,发现我不能直接实例化用户控件,但应该使用页面.LoadControl(…)。问题不在于编译,而是当页面加载控件时,ASCX中的所有控件都为null,然后崩溃 如何使用在ASCX和代码隐藏中动态包含代码的用户控件 编辑: 我在中执行的操作示例(PageLoad或PagePreRender或PagePreInit) 例如,MyC

我很难将一个有自定义用户控件的页面直接修改到ASPX页面,现在只需要在需要时动态加载它。用户控件通过ASCX文件具有html和其他控件,并且代码中包含代码

我阅读了多个页面,发现我不能直接实例化用户控件,但应该使用
页面.LoadControl(…)
。问题不在于编译,而是当页面加载控件时,ASCX中的所有控件都为null,然后崩溃

如何使用在ASCX和代码隐藏中动态包含代码的用户控件

编辑: 我在中执行的操作示例(PageLoad或PagePreRender或PagePreInit)


例如,MyControl确实有
。。。在MyControl中,它将可见性设置为True或False。。。但是当它这样做时,现在它崩溃了,因为“whatever”div为NULL。

我所做的是使用
Page\u Init
中的
Page.LoadControl
方法将自定义用户控件添加到页面上的占位符中

受保护的无效页\u Init(对象发送方,事件参数e)
{
//MyControl是带有代码隐藏文件的自定义用户控件
MyControl MyControl=(MyControl)Page.LoadControl(“~/MyControl.ascx”);
//UserControlHolder是aspx页面上的占位符
//我要将用户控件加载到的位置
UserControlHolder.Controls.Add(myControl);
}
这对我来说很好

以下是动态加载的用户控件的代码:

MyControl.ascx.cs

公共部分类MyControl:System.Web.UI.UserControl
{
受保护的无效页_Init(对象发送方,事件参数e)
{
LiteralControl lit=新的LiteralControl(“测试文字控件”);
Page.Controls.Add(点亮);
}
受保护的无效页面加载(对象发送方、事件参数e)
{
不管怎样,可见=真实;
如果(iPostBack)
{
可见=虚假;
}
}
}

您可以发布用于加载用户控件和应用程序的代码吗?是通过ajax加载控件还是整页加载?
page.LoadControl()
对我来说很好。在处理哪个事件期间(
Page.Init
Page.Load
等)加载它吗?页面加载和页面预呈现在ASCX用户控制文件中声明的NULL对象上执行相同的崩溃行为。我测试了您的代码,也得到了NULL,但当我在回答中使用代码时,效果很好。我将尝试使用路径而不是DID类型加载控制。您的解决方案不会引发错误我有,但我看不到控制。如果我尝试简单地添加新的LiteralControl(“测试”);我确实在源代码中看到了“Test”,但没有看到控件标记……如果您将一些文本直接输入到ASCX中,它会起作用吗?我将尝试生成一个小代码来创建我现在遇到的问题。它可以与一个简单的测试一起工作,但与大组件一起,它不会在任何地方加载(但不会崩溃),非常奇怪……我在某个地方看到了一个不显示它的可见错误。我使用你的解决方案,效果很好+1和答案!为什么使用Page_Init()而不是Page_Load()?
      Control c = LoadControl(typeof(MyControl), null);
      myControl= (MyControl)c;
      myControl.ID = "123";
      myControl.Visible = false;
      Controls.Add(myControl);