Подтвердить что ты не робот

Что может привести к тому, что ViewData.ModelState.IsValid станет ложным

Иногда я обнаружил, что мой ModelState недействителен, но не может найти то, что его недействило, поскольку нет ModelErrors. Каков самый простой способ определить, что недействило ваше состояние модели, если вы сами не добавили ModelError?

4b9b3361

Ответ 1

Глядя на исходный код asp.net mvc, свойство IsValid в ModelStateDictionary просто возвращает true или false в зависимости от того, есть ли какие-либо ошибки в элементе ModelState ICollection, хранящиеся в свойстве Значения.

Вы можете найти любые ошибки, включая сообщение и исключение, например:

foreach(var modelStateValue in ViewData.ModelState.Values)
{
    foreach(var error in modelStateValue.Errors)
    {
        // Do something useful with these properties
        var errorMessage = error.ErrorMessage;
        var exception = error.Exception;
    }
}

Ответ 2

Я столкнулся с подобной проблемой и, используя ту же рутину, которую предоставил Стив, обнаружил, что исключение было (безосновательно) выбрано где-то внутри стандартного связующего объекта, которое не попало в Html.ValidationSummary,

В частности, проблема заключалась в том, что у меня был Dropbox с параметрами "Да" или "Нет" со значениями "1" и "0" (вместо "истина" и "ложь" ), а модель Binder при попытке преобразовать их в логическое значение (которое ожидал мой член сущности), заявив, что 0 не является допустимым значением для Boolean.

Я бы надеялся, что будет создано хорошее сообщение, в котором мой выбор недействителен, но вместо этого меня рассматривали в пустой ValidationSummary. Кажется, что исключение было проглочено! (и теперь это то, что я буду смотреть в будущем). Возможно, это должно быть подано в MS как ошибка?