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") 的页面时,它仍然以 GBP 显示,并且文化仍然是 en-GB。

有什么建议么?

4

2 回答 2

8

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

您可能希望将文化保存在一个Session变量中并在您的页面中使用覆盖InitializeCulture,如:如何:为 ASP.NET 网页全球化设置文化和 UI 文化中所述

于 2011-12-13T10:53:19.567 回答
1

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

于 2011-12-13T10:53:07.583 回答