ASP.NET MVC VALIDATIONSUMMARYを除外したexprodePropertyErrors = Trueレンダリングモデルが無効な場合は空になります

StackOverflow https://stackoverflow.com/questions/3849553

質問

標準検証ムマリーがあるとします:

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

モデルステートにプロパティのモデルエラーが含まれているが、モデル自体ではない場合、検証ムマリーは次のHTMLをレンダリングします。

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

空のリストとして表示されますが、リストの周りの赤い境界線のためにまだ表示されます。これは私にとってバグのようです。検証ムマリーヘルパーが空のリストをレンダリングすることをオフにできますか?

役に立ちましたか?

解決

USRの答えと同様に、私はこれを次のもので修正しました:

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

これにより、実際にオリジナルをフォークする必要はありません。

しかし、同意しましたが、これは非常に迷惑です。

他のヒント

ソースを見ることで解決策がないことがわかった後、コードのMVCバージョンを分岐して1行を変更することで問題を解決しました。

ブートストラップクラスを使用した修正の別のバリエーションは次のとおりです。

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

別の回避策は、スタイルをDivに移動することです。これがCSSです:

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

概要がエラーなしで返されると、divは表示されません。エラーが発生すると、クラスは自動的に検証サマリーエラーに変更されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top