2013-05-29 49 views
17

试图学习ASP.net MVC的基础知识,并不能理解为什么我的客户端验证不起作用。MVC 4客户端验证不起作用

我有这两个我的web.config文件(1是全球性的1是在views文件夹)

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

我在_layout.cshtmlfile有这个

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") 
@Scripts.Render("~/Scripts/jquery.validate.min.js") 

这是我的视图模型针对IM测试报名时间:

public class RegisterVM 
    { 
     [Required(ErrorMessage="Username Required")] 
     public string username { get; set; } 

     [RegularExpression(@"((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20})")] 
     [Required(ErrorMessage="Password Required")] 
     public string password { get; set; } 

     [Compare("password", ErrorMessage="Passwords do not match")] 
     public string passwordConfirm { get; set; } 
    } 

这是我的HTML

@using(@Html.BeginForm()){ 

    @Html.LabelFor(model => model.username) 
    @Html.EditorFor(model => model.username) 
    @Html.ValidationMessageFor(model => model.username)<br /> 

    @Html.LabelFor(model => model.password) 
    @Html.PasswordFor(model => model.password) 
    @Html.ValidationMessageFor(model => model.password)<br /> 

    @Html.LabelFor(model => model.passwordConfirm) 
    @Html.EditorFor(model => model.passwordConfirm) 
    @Html.ValidationMessageFor(model => model.passwordConfirm)<br /> 

    <input type="submit" value="Register" /> 


} 

不想发布在这里,我读了几个关于这里相关的话题,但似乎无法解决我的问题,当我点击提交发布/获取请求。

+3

我不记得确切,但在'_layout.cshtmlfile'正确加载的文件的顺序?你是不是错过了第一个声明中的js,你是否检查过在浏览器中加载的文件? –

+0

查看源代码显示所有文件已加载。 – Larry

+3

您是否尝试在validate.unobtrusive.min.js之前加载validate.min.js – Adil

回答

22

感觉就像这应该工作,我想你需要validate.unobtrusive.min.js之前加载validate.min.js

+0

已经覆盖,这是答案,但上面的意见不能被标记为正确的!谢谢 – Larry

+0

是的,我上面评论,但后来意识到,作为回答可能有助于其他 – Adil

+0

标记为正确的,谢谢:) – Larry

2

那是因为你之前没有加载jquery.validate.min.js不显眼的一个。

3

在你的页面,你必须在页面底部的这两条线段

请参见仔细

@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
} 
+0

我已经在特定页面中添加了此脚本。 –

8

我有一个类似的问题和固定的唯一的事情是手动致电

$.validator.unobtrusive.parse($('form')); 

之前我按下提交按钮。

我终于把它放在文档准备好的回调中。

$(function() { 
    $.validator.unobtrusive.parse($('form')); 
}); 
+0

在尝试了很多没有成功的解决方案之后,这个工作非常好。谢谢 – IFink

+0

我在BundleConfig.cs中捆绑我的脚本并调用'$('#nameOfForm').validate();'不起作用。一旦我添加这条线,它开始工作,所以非常感谢 –

0
$('#divParent').load("url", 
        function() { 
        $.validator.unobtrusive.parse($('form'));} 
       ); 

注:这是如果要加载“形式”或需要“PartialView”动态“的内部格”使用AJAX调用

0

你只需要引用每次需要验证网页上公布这些文件我的朋友!

<script src="~/Scripts/jquery.validate.js"></script>