2

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

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] 为空。我明白为什么会这样,但我不明白如何解决这个问题。

4

1 回答 1

2

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

您会发现很多关于如何持久化控件及其数据的文章,只需使用 搜索"asp.net dynamically added controls are lost at postback"

这是您可以查看的示例:如何在 asp.net 中保留动态创建的控件的值。这是另一个例子:Re: Dynamic Controls in Placeholder loss after postback

希望能帮助到你!

于 2013-09-13T23:42:46.707 回答