>我在页面上有一个占位符,该占位符填充了一个动态表格,该表格具有动态添加的文本框(其中填充了与语言相关的数据(。占位符填充每个页面上的数据。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:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
然后制作语言的下拉列表。自动回发回真
<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";
}
}
自己测试了它以确保它有效。希望它能进一步帮助您。