使用Bootstrap在ASP.NET MVC5中无法使用客户端验证

Sim*_*one 28 asp.net asp.net-mvc jquery twitter-bootstrap asp.net-mvc-5

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

但是,我无法进行不显眼的客户端验证工作.

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

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

使用NuGet,我已经安装jquery.validate并将jquery.validate.unobtrusive它们添加到jquery包中App_Start.

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

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

use*_*829 22

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

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

  • 诀窍(对我而言)是为了确保我没有加载它两次......我在"_Layout.cshtml"上有它,也是我的"view.cshtml"页面底部的"脚本"的一部分. ..我注释掉了"脚本"和中提琴......它突然像宣传的那样起作用. (2认同)

Gar*_*ill 22

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

<script src="/bundles/jqueryval"></script>
Run Code Online (Sandbox Code Playgroud)

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

<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
Run Code Online (Sandbox Code Playgroud)

我查看了App_Start/BundleConfig.cs,果然,JQuery验证包尚未定义RegisterBundles.我不得不补充:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.validate*"));
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:事实证明我的项目中没有JQuery验证脚本.我不得不通过NuGet添加它们("Microsoft JQuery Unobtrusive Validation").

  • 这个答案对我帮助最大 - 我在App_Start/BundleConfig.cs文件中定义了bundle,但是我没有在_Layout.cs文件中使用它的引用.因此,只需添加@ Scripts.Render("〜/ bundles/jquerybal")行就可以让它神奇地工作. (3认同)

fli*_*lip 14

<add key="ClientValidationEnabled" value="true" />在web.config中验证了吗?

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

  • 结合`<add key ="UnobtrusiveJavaScriptEnabled"value ="true"/>`为我解决了它.(MVC5) (3认同)

Mau*_*and 8

在页面底部添加:

@Scripts.Render("~/bundles/jqueryval")
Run Code Online (Sandbox Code Playgroud)

一切都会好起来的.