ASP.NET MVC Validationsummary с excludePropertyErrors = true отображает пустой, если модель недействительна
Скажите, что у вас есть стандартный файл ValidationSummary:
<%: Html.ValidationSummary(excludePropertyErrors: true) %>
Если ModelState содержит ошибки модели для свойств, но не для самой модели, ValidationSummary отображает следующий HTML:
<div class="validation-summary-errors"><ul><li style="display:none"></li></ul></div>
Это отображается как пустой список, но по-прежнему отображается из-за красной границы вокруг списка. Кажется, это ошибка для меня. Могу ли я отключить, чтобы помощник ValidationSummary когда-либо отображал пустой список?
Ответы
Ответ 1
Как и в ответе usr, я исправил это следующим образом:
public static IHtmlString FixedValidationSummary(this HtmlHelper htmlHelper)
{
return htmlHelper.FixedValidationSummary(false);
}
public static IHtmlString FixedValidationSummary(this HtmlHelper htmlHelper,
bool excludePropertyErrors)
{
var result = htmlHelper.ValidationSummary(excludePropertyErrors);
return result == null || result.ToString().Contains("display:none") ? null : result;
}
Таким образом, мне не нужно разворачивать оригинал.
Согласен, однако, это очень раздражает.
Ответ 2
После того, как я узнал, что нет решения, посмотрев на источник, я решил проблему, открыв версию кода MVC и изменив одну строку.
Ответ 3
Другой вариант исправления с классами Bootstrap:
public static class ValidationSummaryExtensions
{
public static MvcHtmlString CleanValidationSummary(this HtmlHelper htmlHelper, bool excludePropertyErrors, string message = null)
{
if(htmlHelper == null) throw new ArgumentNullException("htmlHelper");
MvcHtmlString validationSummary = null;
if (htmlHelper.ViewData.ModelState.ContainsKey(string.Empty))
{
var htmlAttributes = new { @class = "alert alert-danger" };
validationSummary = htmlHelper.ValidationSummary(excludePropertyErrors, message, htmlAttributes);
}
return validationSummary;
}
}
Ответ 4
Еще один способ - переместить стиль в div. Здесь CSS:
div.validation-summary-valid {
display: none;
}
Когда сводка возвращается без ошибок, div не отображается. Когда есть ошибки, класс автоматически изменяется на валидацию-сводные ошибки.