使用Bootstrap在ASP.NET MVC5中无法运行客户端validation

运行Visual Studio 2013,我使用Bootstrap创建了一个新的ASP.NET MVC(5)项目。

但是,我无法进行不显眼的客户端validation工作。

模型在相关属性上具有[Required]属性,并且视图具有表单中每个字段的ValidationMessageFor...标记。

但是,提交表单会导致表单在validation消息出现之前回发到服务器。

使用NuGet,我安装了jquery.validatejquery.validate.unobtrusive并将它们添加到jquery.validate.unobtrusive中的jquery包中。

然而它仍然顽固地发回服务器。 F12开发工具显示没有JS错误/警告。

有没有其他人遇到过这个问题(特别是在与MVC 5相关的SO中看不到任何内容)你有什么想法吗?

我遇到了同样的问题。 解决方案是添加.js引用到母版页(_Layout.cshtml)

  1. jquery.validate.js
  2. jquery.validate.unobtrusive.js

我有同样的问题。 将生成的HTML与工作的网站进行比较,我注意到在文档的最后,有这样的:

  

…而捆绑应该像这样扩展:

   

我查看了App_Start / BundleConfig.cs,果然,还没有在RegisterBundles定义JQueryvalidation包。 我不得不补充:

 bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( "~/Scripts/jquery.validate*")); 

我不知道为什么会失踪。 我从一个新的,干净的项目开始。

当您引用未定义的包时,没有编译时错误是非常粗制滥造的。 即使是永远在线的运行时错误也会比无声失败更好。 浪费了这么多时间!

编辑:事实certificate,我的项目中没有JQueryvalidation脚本。 我不得不通过NuGet添加它们(“Microsoft JQuery Unobtrusive Validation”)。

您是否在web.config中validation了

否则,这提供了一个很好的概述: ASP.NET MVC 3:动态/ AJAX内容的不显眼的客户端validation所需的步骤 。 也适用于MVC5。

在页面底部添加:

 @Scripts.Render("~/bundles/jqueryval") 

一切都会好起来的。

我有同样的问题,我的解决方案是清除浏览器中的所有历史记录(缓存,cookie,表单,…),一切正常。

当我玩第一个MVC项目时,我遇到了同样的问题。 问题是最后我没有将输入元素包含在表单元素中 。 是的,非常愚蠢。 确保您创建表单,例如:

 @using (Html.BeginForm()) { @Html.EditorFor(model => model.FieldA) @Html.ValidationMessageFor(model => model.FieldA) @Html.EditorFor(model => model.FieldB) @Html.ValidationMessageFor(model => model.FieldB) } 

由于使用MVC而不是添加到每个编辑视图,您可以在_Layout.cshtml中添加view / shared文件夹。

只需添加

@Scripts.Render("~/bundles/jqueryval")

在_Layout.cshtml的底部,在…之上

@Scripts.Render("~/bundles/bootstrap") @Scripts.Render("~/bundles/jqueryval")

在这种情况下,脚本将影响使用该布局的每个页面。

我知道游戏有点晚了,但这确实增加了validation,我发现它非常有用。 有时引用其他jquery版本的冲突javascript / jQuery插件/ API引用(例如:searchMeme.js)可能会导致问题,因此我为帐户登录操作创建了唯一的捆绑包。 这些是我要采取的步骤:

1.AccountController.cs创建一个单独的布局〜/ Views / Shared / _AccountLayout.cshtml

2.使用以下命令创建新的〜/ Account / _ViewStart.csthml

 @{ Layout = "~/Views/Shared/_AccountLayout.cshtml"; } 

3.在AccountController的BundleConfig.cs中为css和js创建两个包:

  bundles.Add(new StyleBundle("~/Content/accountcss").Include( "~/Content/site.css", "~/Content/bootstrap.css", "~/Content/font-awesome.css")); /*if using font-awesome */ bundles.Add(new ScriptBundle("~/bundles/accountjs").Include( "~/Scripts/jquery-1.10.2.js", "~/Scripts/jquery.validate.js", "~/Scripts/jquery.validate.unobtrusive.js", "~/Scripts/bootstrap.js"));//must be after jquery validate 

4._AccountLayout.cshtml引用 头部身体两端的束如下:

  @ViewBag.Title   @Styles.Render("~/Content/accountcss") @Scripts.Render("~/bundles/modernizr") @this.RenderSection("MetaContent", false) @this.RenderSection("Styles", false)  @Scripts.Render("~/bundles/accountjs") @this.RenderSection("Scripts", false)  

*注意: 确保bootstrap在包中的jqueryval之后

5.确保分别为〜/ Account / Login.cshtml〜/ Account / Register.cshtml等中的每个输入字段都有@Html.ValidationMessageFor

 
@Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" })
@Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.UserName, "", new { @class = "text-danger" })

6.使用DataAnnotations创建其他自定义validation错误[RegularExpression(@"^([\w]{2,20})@?([\w]{2,20}).?[a-zA-Z]{2,3}$", ErrorMessage="")]

 [Required(ErrorMessage = "*Username is required."), RegularExpression(@"^[\w+]{3,10}\s?([\w+]{3,15})$", ErrorMessage = "*Username can only be Alphanumeric"),StringLength(25, ErrorMessage = "The {0} must be at least {2} characters long and no bigger than {1} characters.", MinimumLength = 5)] public string UserName { get; set; } 

7.(可选)最后,如果您更改了密码的DataAnotation,那么您还必须更改〜/ App_Start / IdentityConfig.cs中的密码策略:

 manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = false, RequireDigit = true, RequireLowercase = true, RequireUppercase = true, }; 

8.(可选)另外,请查看关于角色等的这篇文章 。

我认为模板中缺少@ Html.ValidationMessageFor。 我确实得到了错误,但没有得到消息。