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

时间:2013-07-10 15:07:00

标签: c# asp.net dynamic code-behind mailto

我遇到了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. 我尝试过使用this msdn access server controls ID method,但这不起作用。

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

  3. 我也看过其他关于SO的问题,例如this但是它们通常用于WPF或winforms,而不是我的asp.net问题(这通常不是问题,但我不是需要从我的页面中的每个文本框控件中获取文本,只需要动态创建的文本框。
  4. 我也试过改变我希望代码的方式,我希望它能起作用:

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

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

    textboxesText
    

    问题

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

    我不是要求代码解决方案,因为我还在学习,所以我更倾向于指向正确的方向。

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

1 个答案:

答案 0 :(得分:2)

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

我认为,在你的情况下,最直接的方法是扩展你已经尝试过的想法#1。使用List中的重新创建的足够信息构建这些控件的Load,但您需要将List存储在ViewState或{ {1}}。

Session

ViewState["DynamicControls"] = list;

如果可以,我会使用Session["DynamicControls"] = list; ,因为当用户离开页面时它会被销毁。