2011-12-13 74 views
4

我的应用程序的每个用户都将选择他们的国家,之后它将被存储在cookie中并存储用于以后的请求。一切正常,但我需要在会议开始时设置文化。我目前正在尝试将web.config中的文化设置为en-GB,然后使用Global.asax将会话文化覆盖到en-US。下面的代码为会话设置文化

protected void Session_Start(object sender, EventArgs e) 
    { 
     if (Globals.CountryID == 8) 
     { 
      Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US"); 
      Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US"); 
     } 
    } 

countryID是8,并在以下代码中将文化设置为en-US。但是,当我导航到设置了ToString(“C”)的页面时,它仍然以英镑显示,文化仍然是en-GB。

有什么建议吗?

回答

8

您假设将为页面请求提供服务的线程与您的代码中启动会话的线程相同 - 这是不能保证的。

您可能希望将文化保存在Session变量中,并在页面中使用覆盖InitializeCulture,如How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization中所述。

+0

因此,我需要在每个页面上执行此操作,或为每个其他页面创建一个基页以从中继承?该死,我的申请超过700页。 – Paul

+0

@保罗 - 是的,那些是你的选择。基本页面可能是最好的选择。 – Oded

+0

好的,谢谢你的信息。 – Paul

1

您必须在每次调用时设置文化,Session_Start仅在创建会话时触发。所以你的文化只有在第一次通话或会议重新创建时才是正确的。