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

本文关键字:文本 创建 动态 访问 | 更新日期: 2023-09-27 18:21:46

我无意中发现了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,因为当用户离开页面时,它会被销毁。