MVC 3 установить текущий инвариант культуры
Я пытаюсь установить текущую культуру в инвариант
Сделано это в моем 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 ответа
Вам нужно установить 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;
}
Вы устанавливаете культуру в текущем потоке только после запуска приложения. Но пользовательский запрос может быть обработан другим потоком.
Поэтому решение состоит в том, чтобы в начале каждого запроса вы устанавливали правильную культуру в этом потоке.
В MVC 3 вы можете сделать это, установив правильную культуру в вашем контроллере OnActionExecuting()
метод.
Как описано в этом вопросе, вам нужно использовать application_beginrequest, если вы хотите, чтобы это оказало какое-либо влияние на связыватель модели.
Подбор моделей выполняется до вызова действия контроллера, потому что они создают значения, которые передаются в действие контроллера