ASP.NET MVC ValidationationAmmary с ExcludePropertyErrors = True Randers пусто, если модель недействительна

StackOverflow https://stackoverflow.com/questions/3849553

Вопрос

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

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

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

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

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

Это было полезно?

Решение

Похоже на ответ 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;
}

Таким образом, я не должен вилять оригинал.

Договорились, хотя это очень раздражает.

Другие советы

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

Еще одно изменение исправления с классами 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;
    }
}

Другой обходной путь состоит в том, чтобы переместить стиль в Div. Вот CSS:

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

Когда сводная информация о возврате без ошибок не отображается div. Когда есть ошибки, класс автоматически изменяется на ошибки проверки - Summary.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top