Html.ValidationSummary показывает повторяющиеся сообщения об ошибках - PullRequest
1 голос
/ 01 декабря 2010

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

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

Спасибо взаранее за вашу помощь.

Ответы [ 2 ]

2 голосов
/ 01 декабря 2010

Похоже, это задумано, согласно Брэду Уилсону . Я должен был искать "ConstraintException" и EF4. :)

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

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

Все просто. Спасибо!

0 голосов
/ 15 ноября 2013

Я обнаружил, что с помощью ModelState.Clear (); работал, когда возникла похожая проблема.

...