【问题标题】:Dynamic added textbox control value is not updated动态添加的文本框控件值不更新
【发布时间】:2018-08-30 04:27:56
【问题描述】:

我在页面上有一个占位符,该占位符填充了一个动态表,该表具有动态添加的文本框(填充了与语言相关的数据)。占位符在每个 page.load 上填充数据,但根据使用的语言选择不同的数据。在初始加载时设置了英语,但当用户更改为法语时,文本框中的数据不会从英语更改为法语。但是当我调试时,我可以看到每个文本框都添加了法语。我试图禁用桌子上的视图状态,但这没有帮助。在再次向其添加控件/数据之前,我还使用 PlaceHolder.Controls.Clear()。它们都不起作用,仍然在每个文本框中显示初始英文值。这可能是什么原因造成的?

    Protected Function FindTextBoxValues(ByRef ParentControl As Control, ByRef MyList As List(Of String)) As List(Of String)
    For Each ctrl As Control In ParentControl.Controls
        If TypeOf ctrl Is TextBox Then
            ' do something
            Dim CurrCtrl As New TextBox()
            CurrCtrl = CType(ctrl, TextBox)
            MyList.Add(CurrCtrl.Text)
        ElseIf ctrl.HasControls Then
            FindTextBoxes(ctrl, MyList)
        End If
    Next
End Function

【问题讨论】:

  • 您是在此期间重新加载页面还是使用更新面板?
  • 当用户更改语言时,页面会重新加载并加载法语。加载数据时,生成的每个表行都包含一个带有文本的文字和一个文本框,文字会更改值,但文本框会保持其初始值(英文)...

标签: asp.net dynamic asp.net-placeholder


【解决方案1】:

做了一个小例子。

先添加占位符

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

然后制作语言下拉菜单。 AutoPostBack 为 true

<asp:DropDownList ID="ddlLanguage" runat="server" OnSelectedIndexChanged="ddlLanguage_SelectedIndexChanged" AutoPostBack="true"> 
    <asp:ListItem Text="english" Value="english"></asp:ListItem>
    <asp:ListItem Text="french" Value="french"></asp:ListItem>
</asp:DropDownList>

Page_Init

protected void Page_Init(object sender, EventArgs e)
{
    TextBox tb = new TextBox();
    tb.ID = "test1";
    if (!Page.IsPostBack)
    {
        tb.Text = "this is a English";
    }
    PlaceHolder1.Controls.Add(tb);
}

此事件触发并在占位符内找到控件。

protected void ddlLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
    TextBox ctrl = (TextBox)PlaceHolder1.FindControl("test1");
    DropDownList ddl = (DropDownList)sender;
    if (ddl.SelectedValue == "english")
    {
        ctrl.Text = "this is a English";
    }
    else if (ddl.SelectedValue == "french")
    {
        ctrl.Text = "this is a French";
    }
}

自己测试了它以确保它有效。希望对您有所帮助。

【讨论】:

  • 感谢您将占位符的数据填充移动到 selectedindexchange,现在我只需要找到一种方法来在页面发布后从每个文本框中检索值。我在我的原始帖子中尝试了上面的函数,但它没有检索更改的值,只有从开始获取的值......
  • 嗯,我更正了。当我将占位符数据填充移动到 selectedindexchanged 时,用于检索文本框值的上述函数 (FindTextBoxValues) 不起作用。它仅在 page.load 中有效。那么我现在如何在发布期间检索动态添加的文本框值?
  • 我根据您的需要更改了代码。您必须重新制作 Page_Init 中的控件。在您可以使用 PlaceHolder.FindControl() 读取值之后。
猜你喜欢
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2011-12-27
  • 1970-01-01
相关资源
最近更新 更多