4

プレースホルダー コントロールが宣言された 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);
}

どこにでもある「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という例外が発生します。

コンストラクターを呼び出してインスタンス化を強制しようとしましたが、別の問題が発生しました。どんな助けでも大歓迎です。

4

2 に答える 2

9

私はこれに4時間費やしました。

問題は、ユーザーコントロールを作成していることです

ChartUserControl chart = new ChartUserControl();

ただし、LoadControl を使用する必要があります。

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

どうやら、LoadControl はユーザー コントロールを初期化し、その PlaceHolders (およびそれに含まれる他のコントロール) が使用時に null にならないようにします。

于 2009-10-09T18:58:42.220 に答える
2

コントロールを Page_Load に追加する代わりに、CreateChildControls メソッドをオーバーライドしてそこに追加します。

于 2009-07-09T15:50:34.127 に答える