我的问题是: 网络表单上有一个按钮。它创建 5 个文本框。 然后,同一个网络表单上还有另一个按钮。它从创建的文本框中获取值并进行一些操作:
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 中,textbox[i] 为空。我明白为什么会发生这种情况,但我不明白如何解决这个问题。
最佳答案
这是预期的行为。动态添加的控件在回发后会丢失。通常,您会将这些控件的信息保留在 session 或 View 状态中,并在回发后重建这些控件。 Page_Load 是重建它们的好地方。
您会发现许多关于如何保留控件及其数据的文章,只需搜索“asp.net动态添加的控件在回发时丢失”
即可。
您可以查看以下示例:How to retain values of dynamically created controls in asp.net 。这是另一个例子:Re: Dynamic Controls in Placeholder lossed after postback .
希望对你有帮助!
关于c# - 从之前手动创建的文本框数组中调用 textbox[i],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18796411/