c# - 从之前手动创建的文本框数组中调用 textbox[i]

标签 c# asp.net webforms

我的问题是: 网络表单上有一个按钮。它创建 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/

相关文章:

c# - 配置现有服务在系统启动时运行

c# - 使用 .NET 和 Xamarin 的服务器客户端应用程序

c# - 为什么此代码适用于不同类型?

asp.net - 如何模拟/伪造 ASP.Net Web 表单中的 session 对象?

c# - DropDownList 项目在每次回发后重复其值

C# LINQ to Entities - 从两个表中选择指定的数据,填充现有的模型类

asp.net - 为什么我的 ASP.NET MVC 持久身份验证 cookie 不起作用?

ASP.NET Intellisense 与客户端属性

c# - 将参数传递给绑定(bind)到 gridview 更新中的下拉列表的 sqldatasource

asp.net - 拒绝访问文件夹但允许访问该文件夹内的文件