asp.net mvc: проблема связывания модели по умолчанию - PullRequest
0 голосов
/ 30 мая 2011

У меня есть представление MVC 3, в котором отображается список элементов, которые могут быть отфильтрованы по дате.

Фильтр - это текстовое поле, которое было преобразовано jQueryUI в средство выбора даты.

Просмотр:

<%= Html.TextBoxFor(model => model.ReportedDate, new { @class = "datepicker" })%>

Сценарий:

$(".datepicker").datepicker({
        dateFormat: 'dd/mm/yy',
        changeYear: true,
        changeMonth: true
});

После нажатия кнопки я беру значение текстового поля и отправляю его в действие моего контроллера в качестве параметра строки запросазапрос GET:

MyController/Search?reportedDate=30/05/2011

Действие контроллера:

public ActionResult Search(DateTime? reportedDate)

Исходя из этого, я ожидаю, что механизм связывания модели по умолчанию преобразует параметр запроса reportedDate в обнуляемый DateTime (в данном контексте ноль).представляя все даты или без фильтра).

Однако это не тот случай.reportedDate всегда равно нулю.Я могу углубиться в Request.QueryString и выполнить преобразование вручную, используя DateTime.TryParse, что является моей текущей работой, но я не понимаю, почему она вначале дает сбой.

Нет никакой разницы в формате даты между клиентом и сервером, и есть другие (здесь опущены, но присутствуют в фактическом коде) параметры фильтра других типов данных (string и int), и они обрабатываются без проблем.

Есть какие-нибудь предложения, почему DateTime проблематичен?

Ответы [ 3 ]

3 голосов
/ 30 мая 2011

Вели прав. Если вы хотите использовать этот формат даты, вам понадобится специальный механизм связывания для вашего DateTime. Посмотрите здесь:

Как указать формат даты для привязки модели?

0 голосов
/ 30 мая 2011

вы можете добавить новый маршрут в таблицу маршрутизации, используя

routes.MapRoute(
"SearchRoute", 
"{controller}/{action}/{id}",
new {controller = "Home", action = "Index", reportedDate = UrlParameter.Optional} 
);

, тогда ваш URL станет

MyController/Search/30-05-2011

, что заставит действие вашего контроллера перехватить значение reportDate

но вы должны изменить формат даты, который вы использовали в вашем средстве выбора даты

0 голосов
/ 30 мая 2011

Правильно, проблема в том, что формат даты, в конце концов, похоже, строка ожидаемого формата даты mm/dd/yyyy, а дата выглядит как dd/mm/yyyy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...