2

我偶然发现了我的 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 的其他问题,例如this但是它们通常是针对 WPF 或 winforms,而不是我的 asp.net 问题(这通常不是问题,但我不需要从每个我页面中的文本框控件,只是那些动态创建的)。

我还尝试更改我希望能够工作的代码的调用方式:

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

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

textboxesText

问题

由于它们是动态创建的,我发现很难通过它们的 id 来调用它们,例如:txtExampleID.Text,而且我每次都必须将 ID 增加一个(所以它们不会相互覆盖),这使得事情变得对我来说有点困难。

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

所以总结一下:我需要从我动态创建的文本框中获取文本,以将其添加到我的电子邮件正文中。

4

1 回答 1

2

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

我认为,就您而言,最直接的方法是扩展您已经尝试过的想法 #1。使用足够的信息构建List这些控件中的一个以在中重新创建它们Load,但您需要将其存储ListViewStateSession中。

ViewState["DynamicControls"] = list;

或者

Session["DynamicControls"] = list;

如果可以的话,我会使用ViewState它,因为当用户离开页面时它会被破坏。

于 2013-07-10T15:09:40.950 回答