Pergunta

Digamos que você tenha um validação padrão:

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

Se o ModelState contiver erros de modelo para propriedades, mas não para o modelo em si, a validações renderiza o seguinte HTML:

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

Que é exibido como uma lista vazia, mas ainda é visível devido à borda vermelha ao redor da lista. Isso parece ser um bug para mim. Posso desligar que o ajudante de valores de valores renderá uma lista vazia?

Foi útil?

Solução

Semelhante à resposta de USR, corrigi isso com o seguinte:

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

Dessa forma, eu não tenho que realmente bifurcar o original.

Concordou, porém, isso é muito irritante.

Outras dicas

Depois que descobri que não há solução olhando para a fonte, resolvi o problema comprando a versão MVC do código e modificando uma linha.

Outra variação da correção com as classes de 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;
    }
}

Outra solução alternativa é mover o estilo para a div. Aqui estão o CSS:

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

Quando o resumo retorna sem erros, a div não é exibida. Quando há erros, a classe é alterada automaticamente para validação-sumário-erros.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top