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

时间:2009-07-09 15:47:12

标签: 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反过来有一个占位符,但是当我这样做时,在Page_Load(对于UserControl):

protected void Page_Load(object sender, EventArgs e)
{
    WebControl x = new WebControl();
    userControlPlaceholder.Controls.Add(x);
}

它为我提供了无处不在的“对象引用未设置为对象的实例”异常。

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

2 个答案:

答案 0 :(得分:9)

我自己花了4个小时。

问题在于您使用

创建用户控件
ChartUserControl chart = new ChartUserControl();

但你必须使用LoadControl:

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

显然,LoadControl初始化用户控件,以便当你使用它时,它的PlaceHolders(我会假设它包含的其他控件)不会为null。

答案 1 :(得分:2)

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