Asp.net 动态显示引导';ValidationSummary上的错误div是什么?

Asp.net 动态显示引导';ValidationSummary上的错误div是什么?,asp.net,asp.net-mvc,asp.net-mvc-4,twitter-bootstrap,html-helper,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Twitter Bootstrap,Html Helper,我有一个ASP.NETMVC4.5,它使用Razor视图引擎。我还向它添加了引导 我的疑问是:如何根据@Html.ValidationSummary()动态显示或隐藏div最好没有JQuery 在我的例子中,有一个表单包含几个输入。每当出现验证错误时(例如,空字段),我打算在单个div中显示相关的错误消息 <div class="alert alert-danger"> @Html.ValidationSummary(); </div> @Html.Validatio

我有一个ASP.NETMVC4.5,它使用Razor视图引擎。我还向它添加了引导

我的疑问是:如何根据@Html.ValidationSummary()动态显示或隐藏div最好没有JQuery

在我的例子中,有一个表单包含几个输入。每当出现验证错误时(例如,空字段),我打算在单个div中显示相关的错误消息

<div class="alert alert-danger">
@Html.ValidationSummary();
</div>

@Html.ValidationSummary();

提前谢谢。

我会使用一个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());
     }


}
public static MvcHtmlString BootStrapValidationSummary(此HtmlHelper HtmlHelper)
{
var sb=新的StringBuilder();
var anyErrors=ViewData.ModelState.Values.Where(v=>v.Errors.Count!=0).Any();
var divBeginTag=@”;
var divEndTag=@”;
如果(任何错误){
(b)附录(divBeginTag);
sb.AppendLine(htmlhelp.ValidationSummary());
sb.AppendLine(divEndTag);
返回新的MvcHtmlString(sb.ToString());
} 
其他的
{
返回新的MvcHtmlString(sb.ToString());
}
}
这是一种更快的方法,但感觉像是一种黑客行为(我个人讨厌在视图中使用if语句):

@{
var anyErrors=ViewData.ModelState.Values.Where(v=>v.Errors.Count!=0).Any();
}
@如果(任何错误){
@Html.ValidationSummary();
}

这些都内置于MVC中,没有任何黑客攻击的理由

只需使用:

@Html.ValidationSummary(false, "", new { @class = "alert alert-danger" })
另外,在没有错误时,使用一些CSS将其隐藏:

.validation-summary-valid.alert-danger {
    display: none;
}

更简单、更干净。

您是否使用内置控件验证?我不太确定您的问题(ControlToValidate)。表单包含输入,这些输入是使用@Html.InputFor(x=>model.property)生成的。验证本身很好,正如预期的那样。这里的问题是:当@Html.ValidationSummary()有错误时,我如何显示一个摘要。为什么使用@Html.ValidationSummary(“您的消息,new{@class=“alert-alert-danger”})就足够了呢?使用您所说的@helgeheldre的方式没有成功摘要显示在DIV中(红色的),尽管我需要的是显示这个DIV(包含ValidationSummary)仅当某个字段验证器出错时。我认为应该将所有AppendLine(…)语句包围在{}中或者您总是尝试填充stringbuilder,这似乎有点不必要。事实上,如果没有检测到错误,您可以提前从该方法返回。嗨@hutchonoid,我还没有机会应用您的代码。关于它,您是在“建议”要修改BootStrapValidationSummary方法吗?这样做,会不会产生一些副作用?再次感谢。您好,没有副作用。这是一个新的扩展方法,它将创建,而不是修改。我找不到将BootStrapValidationSummary方法放在何处。我试图创建一个帮助程序(类)但是没有成功。它需要进入一个名为System.Web.Mvc的静态类,并与客户端验证一起工作,在客户端验证中,另一个解决方案失败,只需快速更正:
。验证摘要有效。警报危险。警报危险
应该是
。验证摘要有效。警报。警报危险
。我应该在哪里添加CSS?这比其他解决方案优越
.validation-summary-valid.alert-danger {
    display: none;
}