Pregunta

Supongamos que tiene un ValidationSummary estándar:

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

Si el ModelState contiene errores en el modelo de propiedades, pero no para el propio modelo del ValidationSummary hace que el código HTML siguiente:

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

que se muestra como una lista vacía, pero todavía es visible debido a la frontera roja alrededor de la lista. Esto parece ser un error para mí. ¿Puedo desactivar el ayudante que ValidationSummary volverá a hacer una lista vacía?

¿Fue útil?

Solución

Al igual que en la respuesta de usr, que fija esto con la siguiente:

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 esta manera no tengo que desembolsar en realidad el original.

De acuerdo, sin embargo, esto es muy molesto.

Otros consejos

Después descubrí que no hay una solución examinado la fuente He resuelto el problema por el que se bifurcan la versión MVC del código y la modificación de una línea.

Otra variación de la corrección con clases de Bootstrap es:

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

Otra solución es mover el estilo a la div. Aquí está la CSS:

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

Cuando los rendimientos de resumen con ningún error no se muestra la div. Cuando hay errores de la clase se cambia automáticamente a la validación-summary-errores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top