动态添加的文本框控件值未更新

时间:2018-03-21 06:38:37

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

我在页面上有一个占位符,其中填充了动态表,该动态表具有动态添加的文本框(其中填充了与语言相关的数据)。占位符填充了每个page.load上的数据,但具有不同的数据,具体取决于用户使用的语言选择。在初始加载时,设置了英语,但是当用户更改为法语时,文本框中的数据不会从英语更改为法语。但是当我调试时,我可以看到法语被添加到每个文本框中。我试图在表上禁用viewstate,但这没有帮助。在再次向其添加控件/数据之前,我还使用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

1 个答案:

答案 0 :(得分:0)

做了一个小例子。

首先添加占位符

<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";
    }
}

自己测试以确保它有效。希望它能进一步帮助你。