mvc 3设置当前文化不变量

时间:2011-12-12 16:28:54

标签: asp.net-mvc-3 web-config cultureinfo

我正在尝试将当前文化设置为不变

在我的web.config

中完成此操作
 <globalization uiCulture="" culture="" />

将此添加到我的Application_Start()

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;

但是当我在我的控制器上调用该方法时,Thread.CurrentThread.CurrentCulture被设置为da-DK

怎么会这样?

3 个答案:

答案 0 :(得分:1)

一旦应用程序启动,您只在当前线程上设置文化。但是用户请求可能由另一个线程处理。

因此,解决方案是确保在每个请求的开头,您在该线程上设置正确的文化。

在MVC 3中,您可以通过在Controller的OnActionExecuting()方法中设置正确的文化来实现这一目标。

答案 1 :(得分:0)

您需要在请求线程上设置CurrentCultureCurrentUICulture。这可以通过覆盖Controller中或应用的Action Filter中的OnActionExecutedOnActionExecuting方法来完成:

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
    System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
}

更新:如果您要处理模型绑定方案,则必须放弃操作过滤器:

public void Application_OnBeginRequest(object sender, EventArgs e)
{
    var culture = GetCulture();
    Thread.CurrentThread.CurrentCulture = culture;
    Thread.CurrentThread.CurrentUICulture = culture;
}

答案 2 :(得分:0)

this question所述,如果您希望它对模型绑定器产生任何影响,则需要使用application_beginrequest。

在调用控制器的操作之前执行Modelbinders,因为它们创建了传递给控制器​​操作的值