У меня есть действие контроллера HttpPost, которое принимает объект DTO простой формы.
[HttpPost]
public ViewResult Index(ResultQueryForm queryForm)
{
...
}
public class ResultQueryForm
{
public DateTime? TimestampStart { get; set; }
public DateTime? TimestampEnd { get; set; }
public string Name { get; set; }
}
Объект DTO имеет пустые поля даты и времени, используемые для создания диапазона. Причина, по которой для него установлено значение nullable, заключается в том, что форма, привязанная к модели, является формой запроса, и пользователю не нужно вводить значение даты в форму.
Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь вводит недопустимую дату, я бы хотел, чтобы привязка модели MVC по умолчанию предоставляла сообщение об ошибке. Это происходит безупречно, если у меня есть действие контроллера, которое принимает DateTime? type в качестве аргумента, но так как я передаю DTO, который содержит DateTime? type привязка модели просто устанавливает DateTime? переменная в ноль. Это приводит к неожиданным результатам.
Примечание:
[HttpPost]
public ViewResult Index(DateTime? startDate)
{
// If the user enters an invalid date, the controller action won't even be run because the MVC model binding will fail and return an error message to the user
}
Можно ли как-то сказать, что привязка модели MVC «сбой», если она не может привязать DateTime? значение объекта DTO формы, вместо того, чтобы просто установить его в значение null? Есть ли способ лучше? Передача каждого отдельного ввода формы контроллеру невозможна из-за большого количества свойств в объекте form/dto (я исключил многие из них для удобства чтения).
ModelState.IsValid
? - person Max Toro   schedule 03.01.2012