【问题标题】:Why do I have to click the language twice from the asp:listitem box to change culture?为什么我必须从 asp:listitem 框中单击两次语言才能更改文化?
【发布时间】:2012-02-06 03:16:04
【问题描述】:

我有一个下拉 asp:listitem 框,对我来说看起来非常干净。它的功能类似于第一次您在该页面上更改一种语言(例如,将英语改为瑞典语),它确实将文本更改为该语言。

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

我尝试从后面的代码中删除行,一次一个,但没有任何改变。如果有可能说出可能是什么原因,任何帮助将不胜感激!

我的 .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

【问题讨论】:

  • 尝试 Response.Redirect(Request.Path) 而不是 Server.Trasfer
  • 做到了 AVD!很好的建议。感谢您的帮助和知识 - 直到您提到它,我才想到这一点!

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


【解决方案1】:

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

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

【讨论】:

  • 进行了更改。现在效果很好。感谢您抽出宝贵时间,教我一点 vb Devio!
【解决方案2】:

建议您使用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

【讨论】:

  • 感谢您的时间和回复,Vinay。你的回答和 Devios 都是有道理的,我终于解决了这个令人头疼的问题。感谢您的知识和时间!
猜你喜欢
  • 2012-05-06
  • 2021-01-29
  • 2021-12-30
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 2022-07-05
  • 2013-10-02
  • 2015-07-02
相关资源
最近更新 更多