Дата в текстовых полях меняет формат

У меня есть приложение (asp.net 3.5), поддерживающее 4 разных языка. Наряду с другими культурными изменениями форматы даты должны соответствовать текущей культуре на наших страницах отчетов.

Мы устанавливаем форматы даты для каждого из текстовых полей, например:

string date = DateTime.Today.ToString("d"); //returns the date portion only

textbox1.Text = date;
textbox2.Text = date;

etc...

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

Я отладил это и вижу, что культура верна для приложения, и форматы даты возвращаются мне правильно, но когда он отображается, он отображается неправильно.

Кто-нибудь когда-либо видел это или знает, что происходит?


person AWinters    schedule 11.06.2010    source источник
comment
Вы процитировали формат дд/мм/гггг 4 раза, утверждая, что это переключение... не могли бы вы проверить точные детали? Без фактов сложно диагностировать проблему :)   -  person Jon Skeet    schedule 11.06.2010
comment
Я думаю, вы хотели ввести несколько раз mm/dd/yyyy вместо этого.   -  person Will Eddins    schedule 11.06.2010
comment
Извините... Не знаю, как я это сделал. Сейчас должно быть лучше. Немного опередил...   -  person AWinters    schedule 11.06.2010
comment
Где вы назначаете настройку культуры, и не забудьте также установить uiculture.   -  person Mikael Svenson    schedule 11.06.2010


Ответы (1)


Если вы меняете культуру только для одной страницы, вы должны переопределить InitializeCulture для страниц aspx в вопросах:

protected override void InitializeCulture()
{
    // set your culture, or pick it from maybe the Request object
    string selectedLanguage = "en-US"; 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
    base.InitializeCulture();
}

Если вы хотите установить культуру для всего приложения, используйте Application_BeginRequest в global.asax.

void Application_BeginRequest(Object sender, EventArgs e)
{
   string selectedLanguage = "en-US"; 
   Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
   Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage);
}

Вы, конечно, измените en-US на правильную культуру для своих пользователей.

person Mikael Svenson    schedule 11.06.2010