Почему Thread.CurrentThread.CurrentCulture изменяется между отображением страницы и HttpModule.PostRequestHandlerExecute? - PullRequest
5 голосов
/ 24 февраля 2010

Я создаю HttpModule, которому необходимо знать значение Thread.CurrentThread.CurrentCulture, установленное в приложении MVC. Это значение в настоящее время устанавливается BaseController, но когда мой метод HttpModule.PostRequestHandlerExecute () срабатывает, он возвращается к тому, что было в Культуре до рендеринга страницы.

Я продублировал это, создав простое веб-приложение со следующими шагами:

  1. Module.PreRequestHandlerExecute: установить культуру на A
  2. Page_Load: Культура в настоящее время A. Установите культуру на B
  3. Module.PostRequestHandlerExecute: текущая культура потоков - A. Я ожидал, что это будет B, но он был изменен между рендерингом страницы и PostRequestHandlerExecute

Есть идеи, почему .Net меняет это значение или как я могу обойти это? Поток такой же, поэтому что-то в .Net должно явно возвращать культуру.

1 Ответ

2 голосов
/ 20 мая 2010

Если вы просто установите культуру для работающего потока, любая операция, приводящая к переключению потока (например, другой части жизненного цикла страницы в asp.net), приведет к возврату к культуре по умолчанию.

Рекомендованный подход здесь ...

http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

На этой странице обсуждаются 3 варианта ...

  1. Настройка культуры для всего приложения.
  2. Настройка культуры на уровне страницы.
  3. Установка культуры программно для каждого запроса.

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

...