1

ボタンクリックイベントで動的テキストボックスを作成していて、別のボタンクリックでfindcontrolメソッドを使用してそのテキストボックスのデータをフェッチしたい

 public void addDepartmentBtn_Click(object sender, EventArgs e)
    {

        int count = Convert.ToInt32(countTxtBx.Text);
        lblErrorMsg.Text = "";
        if (Convert.ToInt32(countTxtBx.Text) <= 5)
        {

            for (int i = 0; i < count; i++)
            {
                Label lb = new Label();
                TextBox tb = new TextBox();

                tb.ID = "Textbox_" + i;
                lb.ID = "Label_" + i;
                lb.Text = "Enter Departnment Name: " + Convert.ToInt32(i + 1);
                pnlMain.Controls.Add(new LiteralControl("<br>"));
                pnlMain.Controls.Add(lb);
                pnlMain.Controls.Add(new LiteralControl("&nbsp&nbsp"));
                pnlMain.Controls.Add(tb);
                pnlMain.Controls.Add(new LiteralControl("<br><br>"));
                lblErrorMsg.Text = Convert.ToInt32(i + 1) + "  Departments Created Successfully";
                //string str = string.Empty;
                //TextBox myTB = (TextBox)pnlMain.FindControl("Textbox_" + i);
                //str = myTB.Text;
                //Response.Write(str);

            }

        }
        else
        {
            lblErrorMsg.Text = "You cannot create more than 5 Departments at once:";
        }
    }

button2でクリック:

   protected void Button2_Click(object sender, EventArgs e)
        {
            string alltextdata = null;
            for (int i = 0; i < 5; i++)
            {
                Control controltxt = FindControl("Textbox_"+i);
                if (controltxt != null)
                {
                    TextBox txttemp = (TextBox)controltxt;
                    alltextdata = txttemp.Text;

                }
            }

        }

しかし、私の検索制御メソッドは常にnullを表示します。htmlページビューのソースをチェックします。これにより、テキストボックスの名前とIDが「Textbox_0」、Textbox_1などのすべてが正しいことがわかります。

私は何か間違いをしていますか?助けてください

4

2 に答える 2

2

コントロールを動的に追加する場合、ポストバック(button2ポストバック)後にコントロールツリーに追加されません。addDepartmentBtnがクリックされた後、ポストバックのPage_Loadイベントに再度追加する必要があります。

ViewStateでクリックされたボタンを保存し、Page_Loadで確認します。

public void addDepartmentBtn_Click(object sender, EventArgs e)
    {
        ViewState["addDepartmentBtn_Clicked"] = true;
        AddTextBoxes();
    }

protected void Page_Load(object sender, EventArgs e)
{
    if (Convert.ToBoolean(ViewState["addDepartmentBtn_Clicked"]) == true)
        AddTextBoxes();
}

public void AddTextBoxes()
{
int count = Convert.ToInt32(countTxtBx.Text);
        lblErrorMsg.Text = "";
        if (Convert.ToInt32(countTxtBx.Text) <= 5)
        {

            for (int i = 0; i < count; i++)
            {
                Label lb = new Label();
                TextBox tb = new TextBox();

                tb.ID = "Textbox_" + i;
                lb.ID = "Label_" + i;
                lb.Text = "Enter Departnment Name: " + Convert.ToInt32(i + 1);
                pnlMain.Controls.Add(new LiteralControl("<br>"));
                pnlMain.Controls.Add(lb);
                pnlMain.Controls.Add(new LiteralControl("&nbsp&nbsp"));
                pnlMain.Controls.Add(tb);
                pnlMain.Controls.Add(new LiteralControl("<br><br>"));
                lblErrorMsg.Text = Convert.ToInt32(i + 1) + "  Departments Created Successfully";
                //string str = string.Empty;
                //TextBox myTB = (TextBox)pnlMain.FindControl("Textbox_" + i);
                //str = myTB.Text;
                //Response.Write(str);

            }

        }
        else
        {
            lblErrorMsg.Text = "You cannot create more than 5 Departments at once:";
        }
}
于 2012-12-04T05:54:43.530 に答える
0

findcontrolメソッドを呼び出す前に、ポストバックごとに動的に作成されるため、そのコントロールを再度ロードする必要があります。これらは、Page_Initの下に作成される静的コントロールとは異なります。動的コントロールは、Page_Loadイベントの下に作成されます。

于 2012-12-04T05:58:49.760 に答える