Domanda

Diciamo che avete un ValidationSummary di serie:

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

Se il ModelState contiene errori modello per le proprietà, ma non per il modello stesso della ValidationSummary rende il seguente codice HTML:

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

che viene visualizzato come una lista vuota, ma è ancora visibile a causa del bordo rosso intorno alla lista. Questo sembra essere un bug per me. Posso disattivare che l'assistente ValidationSummary potrà mai rendere un elenco vuoto?

È stato utile?

Soluzione

Simile alla risposta di usr, ho risolto questo con il seguente:

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

In questo modo non ho sborsare in realtà l'originale.

D'accordo, però, questo è molto fastidioso.

Altri suggerimenti

Dopo ho scoperto che non esiste una soluzione, cercando la fonte ho risolto il problema si biforcano la versione MVC del codice e la modifica di una riga.

Un'altra variazione della correzione con le classi 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;
    }
}

Un'altra soluzione è quella di spostare lo stile al div. Ecco il CSS:

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

Quando i rendimenti di sintesi senza errori non viene visualizzato il div. Quando ci sono errori della classe passa automaticamente a validazione-sintesi-errori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top