2

私は次の問題で立ち往生しています.私はたくさんグーグルして、すべての方法を試しましたが、問題を解決できませんでした

コントロールを動的に作成してから、動的に作成されたコントロールから値を読み取ります

しかし、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されるたびに、ページで使用できる場合でもコントロールを見つけることができません。

ここに私のコードがあります

protected void Button1_Click(object sender, EventArgs e)
 {



TextBox txt = new TextBox();
   txt.ID = "myText";
   txt.ViewStateMode = System.Web.UI.ViewStateMode.Enabled;
   Panel1.Controls.Add(txt);

 }

 protected void Button2_Click(object sender, EventArgs e)
 {

       TextBox txt = Panel1.FindControl("myText") as TextBox;

       Response.Write(txt.Text);

 }

aspx ページ コードは次のとおりです。

<div>
   <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

   <asp:Panel ID="Panel1" runat="server"></asp:Panel>

   <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click"/>
</div>
4

2 に答える 2

2

これは、 がクリックされたときにコントロールを作成し、Button1がクリックされたときにアクセスしようとするためButton2です。その状態が維持されないため、すべてのポストバックで動的コントロールを作成する必要があります。クリックでコントロールを構築するだけでなくButton1、フラグを設定してSession、再構築する必要があることがわかりLoadます。そのため、メソッドの最後にButton1_Click次の行を追加します。

Session["BuildMyText"] = true;

そして次にPage_Load

if (Session["BuildMyText"] != null && (bool)Session["BuildMyText"])
{
    // build the text box here too
}

そして最後に、テキスト ボックスの構造を次のButton1_Clickようにラップします。

if (Session["BuildMyText"] != null && (bool)Session["BuildMyText"])
{
    ...
}
于 2013-07-05T12:00:12.610 に答える
0

以下のようにコントロールを再作成する必要があります。

protected void Button2_Click(object sender, EventArgs e)
     {
       TextBox txt = new TextBox();  //add this line
       TextBox txt = Panel1.FindControl("myText") as TextBox;

       Response.Write(txt.Text);

     }
于 2013-07-05T12:03:44.787 に答える