Frage

Angenommen, Sie haben einen Standard Validation:

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

Wenn das Model enthält Modellfehler für Eigenschaften, aber nicht für das Modell selbst die Validation macht die folgende HTML:

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

, die als eine leere Liste angezeigt wird, ist aber immer noch sichtbar, weil der roten Rahmen um die Liste. Dies scheint ein Fehler zu mir zu sein. ausschalten kann ich, dass der Validation Helfer jemals eine leere Liste machen?

War es hilfreich?

Lösung

ähnlich wie usr Antwort, Ich reparierte diese mit dem folgenden:

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

Auf diese Weise muss ich das Original nicht wirklich gabeln.

Einverstanden, aber das ist sehr ärgerlich.

Andere Tipps

Nachdem ich herausgefunden hat, dass es keine Lösung ist, an der Quelle, indem Sie mir das Problem gelöst, indem die MVC-Version des Codes gabelte und eine Zeile zu ändern.

Eine weitere Variante der fix mit Bootstrap-Klassen ist:

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

Eine andere Lösung ist es, den Stil, um die div zu bewegen. Hier ist die CSS:

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

Wenn die Zusammenfassung kehrt ohne Fehler das div wird nicht angezeigt. Wenn es Fehler der Klasse wird automatisch geändert, um die Validierung-Zusammenfassung-Fehler.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top