1

条件に基づいてページにコントロールを動的に追加しています。これらのコントロールにはボタンがあり、クリックイベント用のイベントハンドラーもアタッチしています。このイベントハンドラーで、動的に生成された自分にアクセスしようとしていますコントロールしますが、例外が発生します。これが私のコードです:

protected void Page_Load(object sender, EventArgs e)
        {
            String Method = Request.QueryString["Method"];
            String Tag = Request.QueryString["Tag"];


            if (Method=="ADD" && Tag=="METHOD")
            {

                //6
            TableCell cell11 = new TableCell();
            cell11.Text = "NEXTLEVEL";

            TableCell cell12 = new TableCell();
            TextBox txt6 = new TextBox();
            txt6.ID = "txt6";
            cell12.Controls.Add(txt6);

            TableRow row6 = new TableRow();
            row6.Cells.Add(cell11);
            row6.Cells.Add(cell12);

            container.Rows.Add(row6);
                TableCell cell14 = new TableCell();
                Button submit = new Button();
                submit.ID = "SubmitButton";
                submit.Text = "Submit";
                submit.Click += new EventHandler(submit_Click);

                cell14.Controls.Add(submit);

                TableRow row7 = new TableRow();

                row7.Cells.Add(cell14);

                container.Rows.Add(row7);
            }

void submit_Click(object sender, EventArgs e)
        {
            ModifySessionAnalyzer msa = new ModifySessionAnalyzer();
            TextBox txt6= (TextBox)Page.FindControl("txt6") as TextBox;
            ##String message = txt6.Text;##

        }
4

2 に答える 2

2
TableCell cell12 = new TableCell();
TextBox txt6 = new TextBox();
txt6.ID = "txt6";
cell12.Controls.Add(new TextBox());

これは間違っています。セルに txt6 コントロールを追加するのではなく、新しい textBox を追加しています...

于 2012-05-03T10:50:56.697 に答える
1

動的に追加されたコントロールは、Page_Initメソッド notに追加する必要がありPage_Loadます。それらが追加された場合、それらはPage_Loadコントロール ツリーに追加されず、問題が発生します。つまり、ViewState に正しく参加しません。

テキスト(TextBox)Page.FindControl("txt6")ボックスがコントロール ツリーにないため、失敗する可能性があります。

これが問題の原因である可能性があります。

さらなる説明

あなたのコードは

protected void Page_Init(object sender, EventArgs e)
{
      //.. your code goes here
}

いいえ

protected void Page_Load(object sender, EventArgs e)
{
   //.. your code
}

使用するのは通常のPage_Load習慣であるため、人々にとっては簡単な習慣ですが、動的コントロールを使用する場合、これは例外です

動的コントロールとは、ページでコントロールを宣言するのではなく、オンザフライでコントロールを追加するときのことです。あなたが行くところを探してくださいControls.Add

于 2012-05-03T10:45:11.210 に答える