Что может привести к тому, что ViewData.ModelState.IsValid станет ложным - PullRequest
21 голосов
/ 26 марта 2009

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

Ответы [ 2 ]

36 голосов
/ 15 апреля 2009

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

Вы должны быть в состоянии найти любые ошибки, включая сообщение и исключение, как это:

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;
    }
}
4 голосов
/ 30 мая 2009

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

Проблема, в частности, была у меня в выпадающем списке с опциями «Да» или «Нет» со значениями «1» и «0» (вместо «истина» и «ложь»), и переплет модели связывался при попытке преобразовать их в логическое значение (которого ожидал член моей сущности), заявив, что 0 не является допустимым значением для логического значения.

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

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