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

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

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


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


Ответы (2)


arrow_upward
0
arrow_downward

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

Как описано здесь: 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

arrow_upward
0
arrow_downward

Я почти уверен, что 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