C# 以编程方式添加控件时未实例化占位符

C# 以编程方式添加控件时未实例化占位符,c#,asp.net,user-controls,controls,pageload,C#,Asp.net,User Controls,Controls,Pageload,我有一个声明了占位符控件的ASPX页面 在Codebehind中,我创建了一个UserControl,并将其添加到占位符中 protected void Page_Load(object sender, EventArgs e) { UserControl uc = new ChartUserControl(); myForm.Controls.Add(uc); } UserControl又有一个占位符,但在页面加载(对于UserControl)时: protected

我有一个声明了占位符控件的ASPX页面

在Codebehind中,我创建了一个UserControl,并将其添加到占位符中

protected void Page_Load(object sender, EventArgs e)
{
      UserControl uc = new ChartUserControl();
      myForm.Controls.Add(uc);
}
UserControl又有一个占位符,但在页面加载(对于UserControl)时:

protected void Page_Load(object sender, EventArgs e)
{
    WebControl x = new WebControl();
    userControlPlaceholder.Controls.Add(x);
}
它给了我普遍存在的“对象引用未设置为对象实例”异常


我试图通过调用构造函数来强制实例化,但这给我带来了其他麻烦。任何帮助都将不胜感激。

不要在页面加载中添加控件,而是覆盖CreateChildControls方法并将其添加到那里。

我自己只花了4个小时

问题是您正在使用创建用户控件

ChartUserControl chart = new ChartUserControl();
但您必须使用LoadControl:

ChartUserControl chart =
   (ChartUserControl)LoadControl("~/path/to/control/ChartUserControl.ascx");

显然,LoadControl会初始化用户控件,使其占位符(我假设它包含的其他控件)在使用时不会为空。

感谢您的提示,这很有意义。但是我遇到了完全相同的问题(我把它放在base.CreateChildControls();)之后)。谢谢谢谢谢谢-这也让我摆脱了一大堆doo-doo。太棒了!我想我将不得不重新考虑这个项目的整个方法。除了
LoadControl()
还有其他实现来实例化UserControl吗?