2009-03-26 4 views
21

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

ответ

36

Глядя на asp.net mvc source code, свойство 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; 
    } 
} 
+0

Это потрясающе! +1 – TheOptimusPrimus

4

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

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

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

+0

У вас есть ответ на это? –

+0

Это было несколько лет назад, и я вспоминаю проблему, но не настолько уверен, что я вспоминаю ответ. Я полагаю, что я, возможно, закончил тем, что написал специальный код случая, чтобы выполнить мою собственную проверку, а не полагаться на стандартную привязку модели для этого. (То есть, проверяя Request.Form прямо, чтобы выяснить какие-либо ошибки самостоятельно, предполагая, что ValidationSummary не всегда будет полезен.) Это было в MVC 2, не уверен, что это все еще так в v4? – Funka

Смежные вопросы