从之前手工创建的文本框数组中调用textbox [i]

时间:2013-09-13 22:52:37

标签: c# asp.net webforms

我的问题是: 网络表单上有一个按钮。它创建了5个文本框。 然后,在同一个Web表单上有另一个按钮。它从创建的textBoxes获取值并创建一些东西:

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

TextBox[] textbox;

protected void Button1_Click(object sender, EventArgs e)
{
    textbox = new TextBox[5];
    for (int i = 0; i < 5; i++)
    {
        textbox[i] = new TextBox();
        textbox[i].ID = "textbox[" + i + "]";
        PlaceHolder1.Controls.Add(textbox[i]);
    }
}

protected void Button2_Click(object sender, EventArgs e)
{
    string str = "";
    for (int i = 0; i < 5; i++)
    {
        str += textbox[i].Text;
    }
    Label1.Text = str;
}

错误在Button2_Click文本框[i]为空。我理解为什么会发生这种情况,但我不明白我该如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

这是预期的行为。回发后,动态添加的控件将丢失。通常,您将在Session或viewstate中保留这些控件的信息,并在回发后重建这些控件。 Page_Load是重建它们的好地方。

您将找到许多关于如何保留控件及其数据的文章,只需使用"asp.net dynamically added controls are lost at postback"进行搜索即可。

以下是您可以查看的示例:How to retain values of dynamically created controls in asp.net。这是另一个例子:Re: Dynamic Controls in Placeholder lossed after postback

希望它有所帮助!