Question

Disons que vous avez un ValidationSummary standard:

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

Si le ModelState contient des erreurs modèle pour les propriétés, mais pas pour le modèle lui-même le ValidationSummary rend le suivant HTML:

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

Ce qui est affiché sous la forme d'une liste vide, mais est encore visible à cause de la frontière rouge autour de la liste. Cela me semble être un bug à. Puis-je désactiver que l'aide ValidationSummary ne pourra jamais rendre une liste vide?

Était-ce utile?

La solution

Tout comme la réponse usr, je fixe ce qui suit:

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

De cette façon, je n'ai pas à la fourchette en fait l'original.

D'accord, cependant, ce qui est très ennuyeux.

Autres conseils

Après avoir découvert qu'il n'y a pas de solution en regardant la source, je résolu le problème en bifurquant la version MVC du code et la modification d'une ligne.

Une autre variante de la solution avec les classes 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;
    }
}

Une autre solution consiste à déplacer le style à la div. Voici le CSS:

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

Lorsque les déclarations sommaires sans erreur la div ne s'affiche pas. Quand il y a des erreurs de la classe est automatiquement à des erreurs de validation sommaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top