为什么DropDownList会在选择新项目时从西班牙语切换为英语?如何防止这种情况发生?
<asp:DropDownList ID="ddl_r1pc" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="ddlRelationship_SelectedIndexChanged">
<asp:ListItem></asp:ListItem>
<asp:ListItem Value="Spouse" Text="<%$Resources:messages, RelSpouse %>"></asp:ListItem>
<asp:ListItem Value="Parent(s)" Text="<%$Resources:messages, RelParents %>"></asp:ListItem>
<asp:ListItem Value="Other" Text="<%$Resources:messages, Other %>"></asp:ListItem>
</asp:DropDownList>
然后在Page_Load()
中,这始终会运行(即同时为IsPostBack
和!IsPostBack
):
try {
culture = (string) Session["culture"];
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
}
catch {
Server.Transfer("~/sessiontimeout.aspx");
}
当您选择西班牙语作为您的语言后首次访问此页面时,下拉列表将填充ListItems文本 - 正如预期的那样 - 以西班牙语显示。但是当你从下拉列表中选择另一个项目时,所有项目都会以英文回来!
检查AutoPostBack(服务器端和FireBug)之前的下拉列表时,每个ListItem都已正确设置,如
Value="Some English" Text="Some Español"
而在之后的PostBack,看起来像是
Value="Some English" Text="The same English"
为什么会发生这种情况,我该怎么做才能让西班牙人在任何PostBacks之前看到它?
备注:
OnSelectedIndexChanged
中指出的例程目前已被注释掉,因此问题不存在。 EnableViewState="true"
,但这没有任何区别,所以我删除了它。Thread.CurrentThread.CurrentUICulture
从Page_Load
设置为Page_Init()
,但这也没有任何区别。答案 0 :(得分:0)
尝试添加将CultureInfo
设置为Page_Init
事件的代码,而不是Page_Load
protected override void OnInit(object source, EventArgs e) {
try {
culture = (string) Session["culture"];
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
}
catch {
Server.Transfer("~/sessiontimeout.aspx");
}
}
答案 1 :(得分:0)
事实证明,您需要在被覆盖的CurrentUICulture
中设置InitializeCuture()
:
protected override void InitializeCulture() {
try {
culture = (string) Session["culture"];
Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
}
catch {
Server.Transfer("~/sessiontimeout.aspx");
}
base.InitializeCulture();
}
一旦我把它放入,在AutoPostBacks后,下拉列表将保留所选语言!