ASP.NET MVC Validationsummary с excludePropertyErrors = true отображается пустым, если модель недопустима - PullRequest
10 голосов
/ 03 октября 2010

Скажем, у вас есть стандартная ValidationSummary:

<%: Html.ValidationSummary(excludePropertyErrors: true) %>

Если ModelState содержит ошибки модели для свойств, но не для самой модели, ValidationSummary отображает следующий HTML-код:

<div class="validation-summary-errors"><ul><li style="display:none"></li></ul></div>

, которыйотображается как пустой список, но все еще виден из-за красной рамки вокруг списка.Это, кажется, ошибка для меня.Могу ли я отключить, чтобы помощник ValidationSummary отображал пустой список?

Ответы [ 4 ]

11 голосов
/ 28 апреля 2011

Аналогично ответу 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 голосов
/ 08 октября 2010

После того, как я узнал, что решения нет, посмотрев на источник, я решил проблему, разветвив версию кода MVC и изменив одну строку.

0 голосов
/ 29 марта 2016

Другой обходной путь - перенести стиль в div.Вот CSS:

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

Когда сводка возвращается без ошибок, div не отображается.При наличии ошибок класс автоматически изменяется на validation-summary-errors.

0 голосов
/ 04 марта 2014

Другой вариант исправления с классами 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;
    }
}
...