2015-06-15 1 views
0

У меня есть вызов 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, кажется, не следует принимать во внимание, когда сервер разбора даты?

+0

Duplicate ?: http://stackoverflow.com/questions/23566747/datetime-parse-not-reversing-month-and-day-based-on-thread-culture – peinearydevelopment

+0

Возможно, это связано, но я не звоню в DateTime. Проанализируйте себя, так что это не дубликат. Мне нужен ответ на основе автоматической привязки MVC, которая не выполняет свою работу должным образом. – Eregrith

+0

Можете ли вы рассказать, что является вашим значением «CurrentUICulture»? – Kamo

ответ

0

Постарайтесь убедиться, что ваша культура установлена ​​до привязки модели. Если вы проверите свою настройку System.Threading.Thread.CurrentThread.CurrentCulture внутри вашего действия с контроллерами, то это будет установлено после того, как дата была проанализирована вашим связующим устройством.

Вы можете проверить это, выполнив IAuthorizationFilter.

+0

'System.Threading.Thread.CurrentThread.CurrentCulture'' '{fr-FR}' также в 'OnAuthorization'. 'CurrentUICulture' -' {fr-FR} 'также в этом состоянии. – Eregrith

Смежные вопросы