我有一个使用Razor视图引擎的ASP.NET MVC 4.5。我还添加了Bootstrap。
我的疑问是:如何根据@Html.ValidationSummary()动态显示或隐藏div?-优选没有JQuery。
在我的具体案例中,有一个表单包含几个输入。每当出现验证错误(例如,空字段)时,我打算在单个div.中显示相关的错误消息
<div class="alert alert-danger">
@Html.ValidationSummary();
</div>
提前谢谢。
这一切都内置在MVC中,没有任何黑客攻击的理由。
简单使用:
@Html.ValidationSummary(false, "", new { @class = "alert alert-danger" })
在没有错误的情况下,分配一些CSS来隐藏它:
.validation-summary-valid.alert-danger {
display: none;
}
更容易,更干净。
我会使用一个html助手,你可以这样调用它:
@Html.BootStrapValidationSummary();
这是代码:
public static MvcHtmlString BootStrapValidationSummary(this HtmlHelper htmlHelper)
{
var sb = new StringBuilder();
var anyErrors = ViewData.ModelState.Values.Where( v => v.Errors.Count != 0 ).Any();
var divBeginTag = @"<div class=""alert alert-danger"">";
var divEndTag = @"</div>";
if (anyErrors) {
sb.AppendLine(divBeginTag);
sb.AppendLine(htmlHelper.ValidationSummary());
sb.AppendLine(divEndTag);
return new MvcHtmlString(sb.ToString());
}
else
{
return new MvcHtmlString(sb.ToString());
}
}
这是一种更快的方法,但感觉像是黑客攻击(我个人讨厌在视图中使用if语句):
@{
var anyErrors = ViewData.ModelState.Values.Where( v => v.Errors.Count != 0 ).Any();
}
@if (anyErrors) {
<div class="alert alert-danger">
@Html.ValidationSummary();
</div>
}