我正在尝试将当前文化设置为不变
在我的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
怎么会这样?
答案 0 :(得分:1)
一旦应用程序启动,您只在当前线程上设置文化。但是用户请求可能由另一个线程处理。
因此,解决方案是确保在每个请求的开头,您在该线程上设置正确的文化。
在MVC 3中,您可以通过在Controller的OnActionExecuting()
方法中设置正确的文化来实现这一目标。
答案 1 :(得分:0)
您需要在请求线程上设置CurrentCulture
和CurrentUICulture
。这可以通过覆盖Controller中或应用的Action Filter中的OnActionExecuted
或OnActionExecuting
方法来完成:
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,因为它们创建了传递给控制器操作的值