从动态添加的文本框中访问文本

本文关键字:文本 访问 动态 添加 | 更新日期: 2023-09-27 18:01:16

我有一个.aspx页面,我想在单击按钮时动态地向页面添加文本框。为此,我在页面上添加了一个占位符,并在单击按钮时将控件添加到服务器端。

<asp:PlaceHolder runat="server" ID="NotificationArea"></asp:PlaceHolder>
<asp:Button ID="AddNotification" runat="server" Text="Add" OnClick="AddNotification_Click" />
<asp:Button ID="RemoveNotification" runat="server" Text="Remove" OnClick="RemoveNotification_Click" />

我将文本框存储在一个会话变量中,这样我就可以无限期地继续添加和删除文本框。下面我为添加和删除按钮设置了on_click方法:

protected void AddNotification_Click(object sender, EventArgs e)
{
    List<TextBox> notifications = (List<TextBox>)(Session["Notifications"]);
    notifications.Add(new TextBox());
    notifications[notifications.Count - 1].Width = 450;
    notifications[notifications.Count - 1].ID = "txtNotification" + notifications.Count;
    foreach (TextBox textBox in notifications)
    {
        NotificationArea.Controls.Add(textBox);
    }
    NotificationArea.Controls.Add(notifications[notifications.Count - 1]);
    Session["Notifications"] = notifications;
}
protected void RemoveNotification_Click(object sender, EventArgs e)
{
    List<TextBox> notifications = (List<TextBox>)(Session["Notifications"]);
    if (notifications.Count > 0)
    {
        NotificationArea.Controls.Remove(notifications[notifications.Count - 1]);
        notifications.RemoveAt(notifications.Count - 1);
    }
    foreach (TextBox textBox in notifications)
    {
        NotificationArea.Controls.Add(textBox);
    }
    Session["Notifications"] = notifications;
}

这工作得很好。它不断添加新的文本框,并删除最后一个,如果删除按钮被点击。然后,当我试图从文本框中获取文本时,我遇到了一个问题。实际上,我从未将键入到会话变量中的文本存储在textboce中。只有最初创建的空文本框。另外,请参见下面:

int count = NotificationArea.Controls.Count;

调试显示NotificationArea中的控件计数为0。如何访问这些动态添加的文本框控件的文本?我是否以某种方式添加ontext_change事件到文本框中,将特定文本框的Text保存到会话变量中的等效文本框中?我该怎么做呢?

从动态添加的文本框中访问文本

在这里找到了解决方案。原来,您需要重新创建在每个post back上动态添加的所有控件

public void Page_Init(object sender, EventArgs e)
{
    CreateDynamicControls();
}
private void CreateDynamicControls()
{
    notifications = (List<TextBox>)(Session["Notifications"]);
    if (notifications != null)
    {
        foreach (TextBox textBox in notifications)
        {
            NotificationArea.Controls.Add(textBox);
        }
    }
}

这样做可以让我随时访问这些控件的内容