У меня есть вызов ajax, отправляющий данные от datepicker в качестве короткой даты на мой метод контроллера. Внутри моего контроллера я хочу использовать дату для фильтрации записей в таблице и возвращать все вместе с датой.MVC Controller получает DateTime как разную культуру из CurrentThread.CurrentCulture
культура моего приложения является французской (fr-FR
)
Давайте использовать June 12th 2015
для наших примеров.
я столкнулся с несколькими проблемами:
DatePicker Jquery по умолчанию настроен, чтобы иметь dateFormat: "DD d MM yy"
, поэтому, когда я выбираю 12 июня в выбора даты, поле показывает «VENDREDI 12 JUIN 2015» и JS посылает "vendredi+12+juin+2015"
как мой DateTime поле, которое дает null
внутри метода контроллера.
Я решил исправить это путем повторного указания dateFormat
на "dd/mm/yy"
, который в любом случае занимает меньше места на экране.
Теперь, когда я выбираю 12 июня, поля занимают (и отправляет JS) "12/06/2015"
, что дает {06/12/2015 00:00:00}
по методу контроллера с 12 по мере того как месяц и 06 как день. Я проверил свой System.Threading.Thread.CurrentThread.CurrentCulture
, чтобы увидеть, что это {fr-FR}
, поэтому я не понимаю, почему "12/06/2015"
разобран как 6 декабря.
Я реализовал IAuthorizationFilter
в мой контроллер, чтобы увидеть в OnAuthorization
, что были культура CurrentThread в:
Оба CurrentCulture
и CurrentUICulture
являются {fr-FR}
Я попытался поворачивая его вокруг, и установить формат выбора даты для mm/dd/yyyy
, который (в) правильно переводит 12 июня на "06/12/2015"
, который дает {12/06/2015 00:00:00}
в методе контроллера. Это может сработать, но тогда, когда моя дата будет повторно вставлена на страницу, это «12/06/2015», которая корректна, но интерпретируется datepicker как 12 декабря из-за формата даты.
Я также попытался посылать значение с $('#date').datepicker({ dateFormat: "mm/dd/yy "}).val()
и оставить формат Datepicker по первому зову, как "dd/mm/yy"
, но это по-прежнему дает мне значение отформатированный в "dd/mm/yy"
мне пришлось разобрать, а затем отформатировать дату, как это:
$.datepicker.formatDate("mm/dd/yy", $.datepicker.parseDate("dd/mm/yy", $('#date').val()))
для того, чтобы «обратный» месяц и день трюк сервер в разборе его как 12-го июня.
Дополнительная информация: У меня нет <globalization ...>
в моем Web.config, и у меня нет пользовательского связующего.
Я мог бы, возможно, попытаться иметь SSCCE, если вам это нужно, но это выглядит, как это трудно стягиваются ...
TL; DR: Я CurrentThread.CurrentCulture = {fr-FR}
отображается, когда я разбиваю на первой линии внутри мой метод контроллера, но мой DateTime, отправленный как "12/06/2015"
(12 июня) в запросе, анализируется как "06/12/2015"
(6 декабря) перед передачей его методу моего контроллера.
Почему мой CurrentCulture
, кажется, не следует принимать во внимание, когда сервер разбора даты?
Duplicate ?: http://stackoverflow.com/questions/23566747/datetime-parse-not-reversing-month-and-day-based-on-thread-culture – peinearydevelopment
Возможно, это связано, но я не звоню в DateTime. Проанализируйте себя, так что это не дубликат. Мне нужен ответ на основе автоматической привязки MVC, которая не выполняет свою работу должным образом. – Eregrith
Можете ли вы рассказать, что является вашим значением «CurrentUICulture»? – Kamo