1

Я искал и искал Google для ответа на этот вопрос безрезультатно. Я использую EF4 и ASP.NET MVC2, и у меня есть сущность EF4 «Премия» с полями, не имеющими нулевое значение, «RecipientID». Я использую DataAnnotations для проверки на стороне сервера, поэтому в моем «премиальном» частичном классе я настроил RecipientID на атрибут Required. Когда я пытаюсь отправить форму с текстовым полем RecipientID пустым, я дважды вижу свое сообщение об ошибке «Пожалуйста, введите получателя» в Html.ValidationSummary.Html.ValidationSummary, отображающий повторяющиеся сообщения об ошибках

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

Заранее благодарю вас за помощь.

+0

Если вы показываете соответствующий код, по крайней мере, от вашей модели и вашего вида, это поможет диагностировать проблему. – mlibby 2010-11-30 23:14:48

+0

Спасибо за вашу помощь, но я нашел ответ. :) – Erik 2010-12-01 15:42:30

ответ

2

Похоже, что это предусмотрено, согласно Brad Wilson. Я должен был искать «ConstraintException» и EF4. :)

Согласно Брэду, валидация ввода запускается до того, как модель привязана, в результате чего возникает ошибка «Требуется». Кроме того, эти поля не имеют значения NULL, что означает, что они бросают то же самое «Требуется» во время привязки модели. На мой взгляд, это немного запутывает, что оно будет показывать то же сообщение, указанное в атрибуте «Обязательный», а не сообщение об исключении SQL, поскольку оно делает его похожим на ту же ошибку. Скорее всего, это не так. Вот где ConstraintException приходит в целях предотвращения дублирования сообщений, просто обернуть модель привязки код следующим образом:.

if (ModelState.IsValid) { 
    ValidateModel(award); 
    repository.Add(award); 
    repository.Save(); 
} 

просто. Благодаря!

0

Я обнаружил, что с использованием ModelState.Clear(); работал с аналогичной проблемой.

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