为什么我必须从asp:listitem框中单击两次语言才能更改文化?

时间:2012-02-06 03:16:05

标签: asp.net vb.net visual-studio visual-studio-2010 drop-down-menu

我有一个下拉的asp:listitem框,看起来非常干净。它的功能类似于第一次更改该页面上的语言(Say,English to Swedish)时,确实将文本更改为该语言。

第二次您尝试更改语言(瑞典语返回英语 - 或任何语言),它只是重新加载页面然后您必须选择英语第二次< / em>实际上将页面更改回英语。

我尝试从后面的代码中删除行,一次一个,但没有改变它。如果有可能说出原因,那么任何帮助都会得到真正的赞赏!

我的.aspx页面是这样的:

  <asp:DropDownList ID="ddlCulture" DataTextField="DisplayName"
  DataValueField="Name" runat="server" BackColor="#DDE4EC" ForeColor="#465C71"
  Width="130px"  AutoPostBack="True">
  <asp:ListItem Selected="True" meta:resourcekey="MenuItemResourcelangen9">Select
  Language</asp:ListItem>
  <asp:ListItem Value="en" meta:resourcekey="MenuItemResourcelangen1"></asp:ListItem>
  <asp:ListItem Value="es-MX" meta:resourcekey="MenuItemResourcelangen2">
  </asp:ListItem>
  <asp:ListItem Value="fr" meta:resourcekey="MenuItemResourcelangen3"></asp:ListItem>
  <asp:ListItem Value="de" meta:resourcekey="MenuItemResourcelangen4"></asp:ListItem>
  <asp:ListItem Value="sv" meta:resourcekey="MenuItemResourcelangen5"></asp:ListItem>
  <asp:ListItem Value="ja" meta:resourcekey="MenuItemResourcelangen6"></asp:ListItem>
  <asp:ListItem Value="nl" meta:resourcekey="MenuItemResourcelangen7"></asp:ListItem>
  <asp:ListItem Value="ru" meta:resourcekey="MenuItemResourcelangen8"></asp:ListItem>
  </asp:DropDownList>

我的代码背后是这样的:

Partial Public Class Site
Inherits System.Web.UI.MasterPage

Private Property UICulture As String

Protected Sub InitializeCulture()
    If Session("culture") IsNot Nothing Then
        UICulture = Session("culture").ToString()
    End If
End Sub

Protected Sub ddlCulture_SelectedIndexChanged(sender As Object, e As System.EventArgs)
Handles ddlCulture.SelectedIndexChanged
    Session("uiculture") = ddlCulture.SelectedValue
    Session("culture") = ddlCulture.SelectedValue
    Server.Transfer(Request.Path)
End Sub
End Class

2 个答案:

答案 0 :(得分:1)

我建议您使用Request对象来获取InitializeCulture重载中的选定文化,而不是处理选定的索引更改事件。例如,

Protected Sub InitializeCulture()
   Dim selectedLanguage As String = Request.Form(ddlCulture.UniqueID)
   IF selectedLanguage IsNot Nothing Then
      Me.Culture = Me.UICulture = selectedLanguage
      Thread.CurrentThread.CurrentCulture = _
          CultureInfo.CreateSpecificCulture(selectedLanguage)
      Thread.CurrentThread.CurrentUICulture = New _
         CultureInfo(selectedLanguage)
   End If
   MyBase.InitializeCulture()
End Sub

答案 1 :(得分:1)

在Control的事件(SelectedIndexChanged)之前调用InitializeCulture。

如果您使用Response.Redirect(Request.RawUrl),更改的会话设置将应用于InitializeCulture,并且页面可以刷新(F5)而不会再次“发布”?浏览器中显示消息。