1

カスタムユーザーのWebコントロールのラベルテキストを次のように設定しようとしています

Email em = new Email(); //Email is the class of the custom user web control
em.setEmail(email);
Panel2.Controls.Add(em);

コントロールのsetEmail()関数は、ラベルの値を次のように設定しlblEmailます

public void setEmail(string recEmail)
{
        lblEmail.Text = recEmail;
}

しかし、次のエラーが発生します。 ここに画像の説明を入力してください

デバッグしているときにrecEmail、提供された値を取得していることがわかりました。ただし、に割り当てないでlblEmail.Textください。

コントロール登録の問題が原因かもしれないと思ったので、として登録しました

<%@ Register Src="~/Email.ascx" tagname="Email" TagPrefix="uc1" %>

また、setEmail()関数で次のように値を設定してみました。

public void setEmail(string recEmail)
{
        string a=recEmail;
        lblEmail.Text = a;
}

デバッグ時に、これはaの値を取得しているが、にrecEmail割り当てていないことを示しましたlblEmail.Text

コード全体をアップロードすることはできませんので、次の点に注意してください。

  1. Panel2という名前のパネルは、電子メール制御がパネルに追加された後に条件付きで更新されるUpdatePanelにあります。
  2. Email.ascxファイルは、それを呼び出しているファイルの親フォルダーにあります。Email.ascxがAフォルダーにある場合、それを呼び出すファイルはA/Bフォルダーにあることを意味します。しかし、私はそうは思わない。あなたに状況についての完全な情報を与えるためにちょうど言及されました。

これを解決するために何をすべきか教えてください。

4

1 に答える 1

3

デフォルトでは、ユーザーコントロールのメンバーは、初期化されるまでnullです。また、初期化は、ユーザーコントロール(およびページ、およびおそらく他の同様のタイプ)のコンストラクターでは発生しません。これらは、コントロールがある種のコンテキストに「ロード」されたときに発生します。

このように初期化する代わりに:

Email em = new Email();

メソッドを見てくださいLoadControl()。代わりに、次のように初期化する必要があります。

Email em = (Email)LoadControl("Email.ascx");

これにより、UIコントロールが初期化される、組み込みのページライフサイクルイベントが発生することにより、ユーザーコントロールが初期化されます。

于 2013-03-06T20:32:35.293 に答える