4

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

在代码隐藏中,我创建了一个用户控件并将其添加到占位符中。

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);
}

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

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

4

2 回答 2

9

我自己只花了4个小时。

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

ChartUserControl chart = new ChartUserControl();

但你必须使用 LoadControl:

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

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

于 2009-10-09T18:58:42.220 回答
2

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

于 2009-07-09T15:50:34.127 回答