MVC ModelState ошибочно сообщает об ошибках

Я получаю модель из вида.
Некоторые значения заполняются автоматически.

Однако некоторые обязательные значения необходимо добавить вручную, например, так:

[HttpPost]
public ActionResult Foobar(FooModel model, FormCollection collection)
{
    // "timePicker" is a dropdown list containing different times
    var time = collection["timePicker"].Split(':');
    model.Hours = int.Parse(time[0]);
    model.Minutes = int.Parse(time[1]);

    if (ModelState.IsValid)
    {
        ... // Do stuff
    }
}

Итак, вот проблема:

ModelState.IsValidложно
Я отладил его, и он утверждает, что model.Minutes а также model.Hours не назначены на.
... Что не соответствует действительности, потому что я только что присвоил им значения!

Я подумал об использовании ModelState.Clear(), но я не хочу вручную проверять правильность всей остальной информации.

Есть ли другой способ решить проблему?

1 ответ

Решение

Ну, модель привязки, ошибки в ModelState, было сделано до ввода вашего действия.

Итак Minutes а также Hours ошибки в ModelState перед добавлением значений в часах и минутах (что делает его недействительным).

Вы можете просто удалить эти ошибки (и не все ошибки, так как Clear() делает), делая:

ModelState.Remove("Hours");
ModelState.Remove("Minutes");

Другой способ решить эту проблему - создать (и использовать) собственный ModelBinder.

Другие вопросы по тегам