0

我有一个下拉asp:listitem框,看起来完全干净,给我。它的功能就像第一次你改变该页面上的语言(说,英语到瑞典语),它确实改变文本到该语言。为什么我必须从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 
+1

尝试Response.Redirect(Request.Path)而不是Server.Trasfer – adatapost 2012-02-06 03:43:07

+0

这样做了AVD!伟大的建议。我很感谢帮助和知识 - 直到你提到它之前从未想过这件事! – 2012-02-06 09:33:35

回答

1

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

如果使用Response.Redirect(Request.RawUrl),则会在InitializeCulture中应用已更改的会话设置,并且页面可以刷新(F5)而不需要“发布”?消息在浏览器中。

+0

进行了更改。现在效果很好。感谢您抽出宝贵时间,并教导我一点点Devio! – 2012-02-06 09:34:50

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 
+0

感谢您的时间和回应,Vinay。你的回答和Devios都是有道理的,我终于得到了这个头痛的工作。感谢您的知识和时间! – 2012-02-06 09:35:37

相关问题