1

テキスト ボックスを動的に追加し、ボタンのクリック時にテキスト ボックスに入力されたデータを取得しようとしています。しかし、何が起こっているのかというと、テキスト ボックスにデータを入力したにもかかわらず、ボタンをクリックすると、ページが読み込まれ、コントロールが再度作成されます。その結果、テキスト ボックスのデータが失われています。動的に作成されたテキスト ボックスに入力されたこのデータをキャプチャする方法を教えてください。私のサンプルコードは次のとおりです。

   protected void Page_Load(object sender, EventArgs e)
    {
        Table tblTextboxes = new Table();
        for(int i=0;i<10;i++)
        {
            TableRow tr=new TableRow();
            TableCell tc=new TableCell();
            TextBox tb=new TextBox();
            tb.ID=i.ToString();
            tc.Controls.Add(tb);
            tr.Cells.Add(tc);

            TableCell tc1=new TableCell();
            LinkButton lnk=new LinkButton();
            lnk.ID=i.ToString()+tb.Text+"lnk";
            lnk.Text = "Show";
            lnk.Click+=new EventHandler(lnk_Click);
            tc1.Controls.Add(lnk);

            tr.Cells.Add(tc1);

            tblTextboxes.Rows.Add(tr);
        }
        placeTest.Controls.Add(tblTextboxes);
    }



void  lnk_Click(object sender, EventArgs e)
{
LinkButton lnk=sender as LinkButton;
Label lbl=new Label();
lbl.Text="The text is"+lnk.ID;
placeTest.Controls.Add(lbl);
}
4

2 に答える 2

0

MSDNに基づいて、PageクラスのInitイベントを使用することをお勧めします。説明については、タイトルのビュー ステートと動的に追加されたコントロールを参照してください。また、既存のすべてのコントロールの最後に動的コントロールを追加することをお勧めします。最初にテーブルを作成してから、テキスト ボックスを追加します。

私はあなたのコードを修正しました。それは私のために働いた。私はVS 2012、.Net 4.5を使用しました

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write(DateTime.Now.ToString());

}
protected void Page_Init(object sender, EventArgs e)
{

    Table tblTextboxes = new Table();
    for (int i = 0; i < 10; i++)
    {
        TableRow tr = new TableRow();
        TableCell tc = new TableCell();
        TextBox tb = new TextBox();
        tb.ID = i.ToString();
        tc.Controls.Add(tb);
        tr.Cells.Add(tc);

        //TableCell tc1 = new TableCell();
        //LinkButton lnk = new LinkButton();
        //lnk.ID = i.ToString() + tb.Text + "lnk";
        //lnk.Text = "Show";
        //lnk.Click += new EventHandler(lnk_Click);
        //tc1.Controls.Add(lnk);

        //tr.Cells.Add(tc1);

        tblTextboxes.Rows.Add(tr);
    }
    placeTest.Controls.Add(tblTextboxes);

}

protected void Button1_Click(object sender, EventArgs e)
{

}
于 2013-05-02T20:02:21.283 に答える