ASP.NET MVC VALIDATIONSUMMARYを除外したexprodePropertyErrors = Trueレンダリングモデルが無効な場合は空になります
-
27-09-2019 - |
質問
標準検証ムマリーがあるとします:
<%: 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は表示されません。エラーが発生すると、クラスは自動的に検証サマリーエラーに変更されます。
所属していません StackOverflow