Html.ValidationSummary(false, message) всегда отображается, даже при загрузке страницы

Я использую проверку на стороне клиента и хочу, чтобы сообщение ниже отображалось только при возникновении ошибки. Я пытаюсь использовать эту общую ошибку, если какое-либо поле недействительно.
В настоящее время

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

всегда отображается даже до проверки.

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

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


person MondayPaper    schedule 12.11.2010    source источник


Ответы (3)


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

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

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

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

person Ryan O'Neill    schedule 03.05.2011
comment
Почему этого нет в таблице стилей по умолчанию? - person Giovanni B; 18.01.2013
comment
И с какой стати фреймворк требует одного сообщения для суммирования как действительных, так и недействительных моделей? - person Carl G; 20.05.2013
comment
Хорошо, если проверка на стороне клиента включена, они не могут удалить div со страницы, как на стороне сервера, поскольку js должен иметь возможность показывать и скрывать его. Они могли бы просто использовать display:none, чтобы скрыть это, но вместо этого они использовали класс, который дает вам больше контроля над стилем (за счет того, что вы в любом случае настраиваете правило таблицы стилей). - person James Morcom; 25.10.2013
comment
Спасибо за объяснение проблемы. По какой-то причине этот CSS не будет работать на мобильных устройствах, если я не встрою его прямо на страницу, а не в файл CSS для всего сайта. Вместо этого я обернул вызов Html.ValidationSummary в условное выражение. Сначала я проверяю ViewData.ModelState.IsValid. - person DustinA; 21.11.2014

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

person Mark P    schedule 24.02.2011
comment
Но если вы сделаете это, вы потеряете проверку на стороне клиента. - person Ryan O'Neill; 03.05.2011
comment
Перемещение Html.ValidationSummary выше Html.BeginForm привело к тому, что он вообще перестал отображаться (MVC 4/Razor). - person SushiGuy; 11.06.2013
comment
Согласитесь - проблема с отображением сводки все время возникает только тогда, когда ClientValidationEnabled имеет значение true. Это решение фактически аналогично установке значения false путем нарушения проверки на стороне клиента. - person James Morcom; 25.10.2013
comment
Как уже отмечалось, это просто ломает его наоборот. - person twip; 27.01.2016

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

return View(new myModel)

to

return View()

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

person Kristianne Nerona    schedule 14.06.2017