访问动态创建的文本框文本

我偶然发现了我的asp.net表单问题。

在我的表单中,最终用户选择了一些动态创建的文本框 ,这一切都可以正常使用以下代码:

protected void txtAmountSubmit_Click(object sender, EventArgs e) { int amountOfTasks; int.TryParse(txtAmountOfTasks.Text, out amountOfTasks); for (int i = 0; i < amountOfTasks; i++) { TextBox txtAddItem = new TextBox(); txtAddItem.ID = "txtAddItem" + i; txtAddItem.TextMode = TextBoxMode.MultiLine; questionNine.Controls.Add(txtAddItem); txtList.Add(txtAddItem.ID); } } 

然而,这也给我带来了一个小问题,稍后在我的表单上单击提交按钮,我将结果发送给它需要去的指定人员(使用smtp电子邮件)。 这部分很好, 直到我试图从这些动态创建的文本框中检索文本

我试过的

  1. 我已经尝试使用这个msdn访问服务器控件ID方法但是这不起作用。

  2. 我试图将这些新文本框添加到列表中,但是我不确定如何在文本框中包含文本时更新这些文本框。 因此,我的结果因此而返回null。

  3. 我也查了关于SO的其他问题,比如这些,但是它们通常用于WPF或winforms,而不是我的asp.net问题(这通常不是问题,但我不需要从每个人那里得到文本我的页面中的文本框控件,只是动态创建的控件。

我也试过改变我调用代码的方式,我希望它能起作用:

 string textboxesText = string.Join("\n", txtList.Select(x => x).ToArray()); 

然后在我的串联字符串(电子邮件正文)中我会打电话:

 textboxesText 

问题

因为它们是动态创建的,我发现很难通过它们的id来调用它们,例如:txtExampleID.Text,因为我每次都要增加一个ID(所以它们不会互相覆盖)它已经使事情变成了对我来说有点困难。

我不是要求代码解决方案,我更喜欢指向正确的指针,因为我还在学习。

总而言之:我需要从动态创建的文本框中获取文本,将其添加到我的电子邮件正文中。

问题是这些文本框需要每次在页面的Load事件中重新创建 ,以便可以连接和检索事件和值。

我认为,在你的情况下,最直接的方法是扩展你已经尝试过的第1个想法。 使用足够的信息构建这些控件的List以在Load 重新创建它们 ,但是您需要将该List存储在ViewStateSession

 ViewState["DynamicControls"] = list; 

要么

 Session["DynamicControls"] = list; 

如果可以,我会使用ViewState ,因为当用户离开页面时它会被销毁。