2010-11-12 2 views
38

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

"* обозначает обязательное поле"

всегда показывает еще до проверки.

<%: Html.ValidationSummary(false, "* denotes required field.")%> 

Я использую привязку модели для выполнения проверки на стороне клиента и MVC.

ответ

71

Если вы используете инструмент разработчика в своем браузере для проверки сводного текста валидации, вы увидите, что он имеет класс validation-summary-valid, когда он ясен, но validation-summary-errors при возникновении ошибок формы.

Поэтому просто создайте правило css следующим образом;

.validation-summary-valid { 
    display:none; 
} 

и все должно быть хорошо.

+20

Почему это не в таблице стилей по умолчанию? –

+1

И почему структура требует единого сообщения для суммирования как допустимых, так и недопустимых моделей? –

+2

Ну, если проверка на стороне клиента включена, они не могут удалить div со страницы, как это было бы на стороне сервера, поскольку js должен быть способен показать и скрыть ее. Они могли бы использовать только отображение: нет, чтобы скрыть это, но вместо этого они использовали класс, который дает вам больше контроля над стилем (за счет того, что вы настраиваете правило стилей в любом случае). –

4

Я думаю, что проблема заключается в том, что Html.ValidationSummary должен появиться перед Html.BeginForm, иначе сообщение всегда отображается.

+1

Это сработало для меня. –

+2

Но если вы это сделаете, вы потеряете проверку на стороне клиента. –

+3

Перемещение Html.ValidationSummary выше Html.BeginForm заставил его перестать появляться вообще (MVC 4/Razor). – SushiGuy

0

Первоначально я проверял свойство списка на загрузке страницы, так что я думал о передаче новой модели. Затем только что появилось резюме проверки. Когда я изменил код из

return View(new myModel) 

в

return View() 

сводке проверки не появлялся на Get. Я также добавил нулевую проверку модели при проверке свойства, чтобы использовать последний код.