asp.net mvc客户端validation不起作用?

出于某种原因,我的客户端validation似乎不起作用:

这是我的HTML:

@using (Html.BeginForm("Create", "Home", FormMethod.Post)) { 
@Html.ValidationSummary(true)

@foreach (var item in Model.ClientId) { @item }

@Html.EditorFor(model => model.UserModel.name) @Html.ValidationMessageFor(model => model.UserModel.name)

@**@ @Html.EditorFor(model => model.UserModel.password) @Html.ValidationMessageFor(model => model.UserModel.password)

@**@ @Html.EditorFor(model => model.UserModel.email) @Html.ValidationMessageFor(model => model.UserModel.email)

Company End-User

这是我的模型:

  public class CreateUserModel { [Required] [Display(Name = "Client_ID")] public string clientId { get; set; } [Required(ErrorMessage = "A name is required")] [MaxLength(20), MinLength(2, ErrorMessage = "Name must be 2 character or more")] [Display(Name = "Name")] public string name { get; set; } [Display(Name = "Email Address")] [Required(ErrorMessage = "Email is Required")] [RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Email is not valid")] public string email { get; set; } [Required] [MaxLength(20), MinLength(6, ErrorMessage = "Password Must be 6 or more chataters long")] [Display(Name = "Password")] public string password { get; set; } [Required] public int accessLevel { get; set; } } 

我确实在webconfig中启用了客户端:

       

{EDIT}添加了渲染的html

      Home Page - My ASP.NET Application       

Add Users to the website



Company End-User


© 2014 - My ASP.NET Application

由于某种原因,Html助手在输入中没有生成validation属性(data-val =“true”和其他),请检查。 除了检查加载JavaScript库的顺序:

    

您的问题可能是您的文件底部有jQuery,但是您将jquery.validate放在顶部。 jQuery必须在jQuery.validate之前出现。 我建议总是把jQuery放在你的标题中,而不是放在正文中,它应该是现代化之后的第一件事。

另外,你知道jQuery 2.x早先不适用于IE8,对吗?

看来你的jquery.validate.js处于错误的位置。 它必须在主jquery ref之后。

对于MVC 5,它应该如下:

_Layout.cshtml 🙁页面底部)

  ... ... @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @Scripts.Render("~/bundles/jqueryval")  @RenderSection("scripts", required: false)  

其中~/bundles/jqueryvalBundleConfig.cs中定义:RegisterBundles()方法:

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

使用:

 @Html.EditorFor 

代替:

  

当然,您需要jquery.validate.*脚本

试试这个:您的validation失败了,因为您在页面底部对此JQuery链接版本进行了硬编码,该版本可能已更新为Scripts文件夹中的较新版本:

  

您需要做的就是转到“Scripts”,查看是否有“jquery-2.1.0.js”文件或者您将JQuery更新为更新版本。 如果找到,请键入较新的版本文件名,然后重新测试。 它现在应该工作。 截至2017年6月,我们使用的是JQuery 3.1.1版

这件事发生在我身上,我拉着头发,直到我意识到我已经更新了JQuery并看到它删除了旧版本。 我打赌那是你的问题。 如果您不这样做,我建议您不要使用View View模板在视图页面中粘贴validation脚本,而是创建一个简单的用户控件或母版页或布局视图页面,并在其中填充您的JQuery链接,以便所有人共享它们项目页面。 浏览器将自然地第一次缓存这些页面,因此即使它们未在其他页面上使用,它们也不会再次加载。

不确定是否正在动态加载(例如,使用Ajax加载部分视图)。 如果是这样,那么你需要用成功的validation器解析html,例如使用类似…

 $.validator.unobtrusive.parse(".target"); 

例如

  function loadAPartialView(endPoint) { $.ajax({ url: endPoint, type: 'GET', cache: false, success: function (result) { $('.target').html(result); $('.target').show(); // IMPORTANT. Next line is required to get the client side validation to run. $.validator.unobtrusive.parse(".target"); $(".loadingMessage").hide(); }, error: function (result) { // Error message... $(".loadingMessage").hide(); } }); };