Я добавил помощник ValidationSummary Html для класса View Model, который имеет 5 обязательных полей. И это работает, получилось красивое красное слово отсутствует 1, отсутствует 2 и т.д. Но мне нужно отобразить только одно сообщение, а не пять из них (что-то вроде: "Ваш ввод недействителен" ). Можно ли это сделать с помощью ValidationSummary?
Как удалить список из сводки проверки
Ответ 1
У вас есть два варианта (по крайней мере):
Использовать сводку проверки достоверности и исключить ошибки свойств:
@Html.ValidationSummary(true, "The input is not valid")
или связать сообщение об ошибке с пользовательским ключом в вашем действии:
if (!ModelState.IsValid)
{
ModelState.AddModelError("myerrorsummary", "The input is not valid");
}
и отобразите его на своей странице:
@Html.ValidationMessage("myerrorsummary")
Ответ 2
Вы можете попробовать пропустить помощники, если все, что вы хотите сделать, это просто показать сообщение, если ModelState недействительно. Просто проверьте ModelState
внутри ViewData
, и это должно работать.
@if (!ViewData.ModelState.IsValid)
{
<p>Your input is not valid.</p>
}
Ответ 3
Если вы посмотрите на исходный код MVC3, вы увидите, что в настоящее время, если вы используете ValidationSummary
с excludePropertyErrors=true
, имея UnobtrusiveJavaScriptEnabled
, не будет отображаться итоговое резюме.
Мне удалось отобразить только одно сообщение с MVC3 с включенным UnobtrusiveJavascript для проверки на стороне клиента. Не используйте @Html.ValidationSummary
вообще, а рендеринг:
@{
//Show the message when there are server side errors
ViewBag.ValidationSummaryClass = ViewData.ModelState.IsValid ? "validation-summary-valid" : "validation-summary-errors";
}
<div class="@ViewBag.ValidationSummaryClass" data-valmsg-summary="true">
<span>Before you can continue, please make sure you have completed the mandatory fields highlighted above.</span>
<ul style="display:none"/>
</div>
Обратите внимание, что display:none
, ненавязчивый javascript по-прежнему заполняет список сообщениями об ошибках, но они скрыты.
Ответ 4
Один подход грубой силы, который я использовал в MVC3:
if (!ModelState.IsValid)
{
ModelState.AddModelError("", "Some contextual error message");
}
и отобразите его на своей странице:
<% if(!ViewData.ModelState.IsValid) { %>
<span class="error"><%=ViewData.ModelState[String.Empty].Errors[0].ErrorMessage %> </span>
<% } %>