Если установленная вами культура не считывается из настроек браузера (например, она находится в базе данных), вам необходимо установить ее при каждом запросе.
Как описано здесь: 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