У меня есть приложение ASP .NET Web Forms, которое использует атрибут WebMethod для выполнения вызовов AJAX из jQuery. Я пытаюсь локализовать приложение, поэтому недавно создал веб-метод, который выглядит примерно так для целей тестирования:
[WebMethod]
public static string HandleDate(DateTime dateValue)
{
return dateValue.ToString("f");
}
Смысл этого метода в том, чтобы убедиться, что если я правильно установлю CultureInfo, веб-метод будет правильно анализировать предоставленную дату, используя правила форматирования даты для этой культуры. К сожалению, этот код никогда не будет достигнут. Вместо этого я вижу ошибку, вызываемую вспомогательными классами, которые позволяют вызывать эти WebMethods.
У меня есть HttpModule, который устанавливает для свойств «CurrentCulture» и «CurrentUICulture» текущего потока значение «pt-BR» (бразильский португальский) в событии «BeginRequest».
На стороне клиента у меня есть вызов jQuery AJAX для этого веб-метода HandleDate, который предоставляет параметр dateValue как «18/10/2010». В языке и региональных параметрах pt-BR это должно оцениваться как 18 октября 2010 г. (формат даты день/месяц/год).
Когда я выполняю это, я получаю сообщение об ошибке, указывающее, что «System.Web.Script.Serialization.ObjectConverter» взрывается, заявляя, что «18/11/2010» не является допустимым значением для DateTime. Трассировка стека, включенная в ошибку, указывает, что это было вызвано методом System.ComponentModel.DateTimeCoverter.ConvertFrom, который принимает объект для преобразования в дополнение к объекту CultureInfo, представляющему язык и региональные параметры, которые следует применять во время преобразования.
Я запустил Reflector, и оказалось, что «ObjectConverter» вызывает «DateTimeConverter», используя экземпляр CultureInfo.InvariantCulture, что, как мне кажется, является проблемой.
Как я могу заставить эту логику использовать CultureInfo, прикрепленную к текущему потоку, вместо InvariantCulture?
dateValue.ToString("f")
- person Greg   schedule 18.11.2010