MVC 3 установить текущий инвариант культуры - PullRequest
0 голосов
/ 12 декабря 2011

Я пытаюсь установить текущую культуру в инвариант

Сделано это в моем 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 ]

1 голос
/ 12 декабря 2011

Вы устанавливаете культуру в текущем потоке только после запуска приложения. Но пользовательский запрос может быть обработан другим потоком.

Поэтому решение состоит в том, чтобы в начале каждого запроса вы устанавливали правильную культуру для этого потока.

В MVC 3 вы можете сделать это, установив правильную культуру в методе OnActionExecuting() вашего контроллера.

0 голосов
/ 09 апреля 2013

Как описано в этом вопросе , вам нужно использовать application_beginrequest, если вы хотите, чтобы это оказало какое-либо влияние на связыватель моделей.

Связыватели моделей выполняются до вызова действия контроллера, потому что они создаютзначения, которые передаются в действие контроллера

0 голосов
/ 12 декабря 2011

Вам необходимо установить CurrentCulture и CurrentUICulture в потоке запросов. Это можно сделать, переопределив методы 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;
}
...