ASP.NET сбрасывает культуру потока после использования?

Если я установлю культуру потока и UICulture для одного ASPX, после прохождения этой страницы все мои aspx, использующие один и тот же поток (не один и тот же запрос), будут иметь одну и ту же культуру?

Потому что мне нужно установить культуру только для одного ASMX


person Felipe Pessoto    schedule 21.09.2010    source источник


Ответы (2)


Если установленная вами культура не считывается из настроек браузера (например, она находится в базе данных), вам необходимо установить ее при каждом запросе.

Как описано здесь: http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

Переопределите метод InitializeCulture страницы на каждой странице. Здесь очень пригодится общий базовый класс для всех ваших страниц.

Я бы предложил запустить .NET Reflector и посмотреть, что делает реализация по умолчанию. Это поможет прояснить, что происходит по умолчанию.

Поскольку это событие обрабатывается на уровне страницы, а не в Global.asax, я ожидаю, что это будет переустановлено. Кроме того, как описано в статье, это событие вызывается так рано в жизненном цикле страницы, что для захвата пользовательского ввода требуется прямой доступ к «Request.Form».

РЕДАКТИРОВАТЬ: попробуйте это и убедитесь, что это должно быть установлено в каждом запросе. Дайте мне знать, если вы видите разные результаты или если я неправильно понимаю ваш вопрос.

Default.aspx: печатает "21.09.2010"

<%@ Page Language="C#" %>

<%@ Import Namespace="System.Threading" %>
<%@ Import Namespace="System.Globalization" %>

<script runat="server">
protected override void InitializeCulture()
        {
            UICulture = "de-DE";
            Culture = "de-DE";
            //base.InitializeCulture();
        }   
</script>
<HTML>
<head>
</head>
<body>
<%= System.DateTime.Now.ToShortDateString()%>
</body>
</HTML>

Default2.aspx: печатает «21 сентября 2010 г.» (моя группа по умолчанию — es-US)

<%@ Page Language="C#" %>
<HTML>
<head>
</head>
<body>
<%= System.DateTime.Now.ToShortDateString()%>
</body>
</HTML>

Порядок, в котором вы открываете эти страницы, не имеет значения. Результаты не меняются.

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

person brian chandley    schedule 21.09.2010

Я почти уверен, что UICulture, однажды установленный, остается в течение всего сеанса ASP (который происходит независимо от того, какой сеанс вы создаете для своего собственного приложения).

Изменить: здесь выглядит простое резюме: http://quickstarts.asp.net/QuickStartv20/aspnet/doc/localization/localization.aspx

person Oren Mazor    schedule 21.09.2010
comment
Новые запросы у вас приходят с того же UICulture, что я ставил по другому запросу? Потому что мне нужно установить культуру только для одного ASMX - person Felipe Pessoto; 21.09.2010
comment
если запрос идет от того же клиента, и вы ничего не меняли, то это должен быть тот же UICulture. - person Oren Mazor; 21.09.2010