10

假设你有一个标准的 ValidationSummary:

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

如果 ModelState 包含属性的模型错误,但不包含模型本身的错误,则 ValidationSummary 会呈现以下 HTML:

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

它显示为一个空列表,但由于列表周围的红色边框仍然可见。这对我来说似乎是一个错误。我可以关闭 ValidationSummary 助手将永远呈现一个空列表吗?

4

4 回答 4

11

与 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;
}

这样我就不必真正分叉原件。

同意,不过,这很烦人。

于 2011-04-28T19:52:51.393 回答
2

在我通过查看源代码发现没有解决方案后,我通过 fork MVC 版本的代码并修改一行来解决问题。

于 2010-10-08T15:09:58.727 回答
0

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;
    }
}
于 2014-03-04T12:10:45.170 回答
0

另一种解决方法是将样式移动到 div。这是CSS:

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

当摘要返回且没有错误时,不会显示 div。当出现错误时,该类会自动更改为validation-summary-errors。

于 2016-03-28T21:55:16.100 回答