Asp.Net MVC выполняет автоматическую проверку модели для DateTime, но не для других - PullRequest
1 голос
/ 15 марта 2010

Я использую MVC 2 с некоторыми моделями из проекта LinqToSql, который я построил. Я вижу, что когда я отправляю обратно в действие контроллера после редактирования формы, имеющей поле DateTime из модели, помощник MVC Html.ValidationMessageFor () будет приятно отображать ошибку рядом с текстовым полем «Дата».

Это происходит автоматически, когда вы тестируете ModelState.IsValid () в действии контроллера, как если бы привязка модели MVC автоматически знала, что поле DateTime не может быть пустым. У меня вопрос ... У меня есть некоторые другие строковые поля в этих сгенерированных классах LinqToSql, которые не могут быть обнулены (помечены как не обнуляемые в Sql Server, который проходит через сгенерированные классы LinqToSql), так почему же г-н MVC не забирает а также отобразить сообщение «Требуется» в заполнителях ValidationMessageFor (), которые я добавил для этих полей, как это делается для поля DateTime?

Конечно, я успешно добавил классы собеседников MetadataType (typeof ), чтобы покрыть эти ненулевые строковые поля, но, конечно, кажется избыточным добавлять все эти метаданные в классы собеседников, когда сгенерированные классы LinqToSql уже содержат достаточно Информация о том, что MVC может прослушать, как это происходит с DateTime. Если проверка MVC работает с DateTime автоматически, почему бы не использовать эти поля, не допускающие значения NULL?

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

AFAIK все типизированные параметры действия автоматически запрашиваются и проверяются, а параметры действия ссылочного типа - нет. они проверены против некоторого поставщика проверки, т.е. DataAnnotations.

0 голосов
/ 15 марта 2010

Поскольку вы упоминаете ValidationMessageFor (), я предполагаю, что у вас есть это поле в форме (в более поздних сборках MVC 2 было изменение, которое «обязательно» в модели на самом деле не требуется, если поле не находится вВид).

Другая причина, которую я заметил, заключается в том, что г-н MVC может заметить, что есть ошибка;но сообщение подавляется либо настройками DataAnnotation, либо, возможно, даже самим ValidationMessageFor ().Я не помню деталей сейчас, но я был озадачен, почему нет сообщения, и обнаружил, что просто само сообщение проверки пусто.

Самый простой способ исключить такую ​​возможность - взломатьотладчик, и посмотреть, если ModelState.IsValid имеет значение true.Если false, то очевидно, что Mr MVC действительно поднял ... Если true, я никогда не видел такой вещи (поле определено как обязательное, но ошибки не обнаружено);но я работал преимущественно с EF.Хотя я ожидаю, что LinqToSql будет действовать так же - у меня нет опыта из первых рук

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