MVC3 Razor JQuery客户端validation带有一个额外的警告框
我被要求创建一个登录表单,当用户输入未通过validation时,它会弹出一个警告框。
我使用基于模型的validation连接所有内容。
例如:
public class LogonViewModel { [Required( ErrorMessage = "User Name is Required")] public string UserName { get; set; } [Required( ErrorMessage = "Password is required")] public string Password { get; set; } }
我在页面上有一个validation摘要:
Html.ValidationSummary()
我希望摘要在页面上,以防用户关闭javascript。 但是,如果客户端validation触发,我还想捕获validation事件并将错误放入警报框,就像我被问到的那样。
我的表格基本上是……
@Html.ValidationSummary() @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "loginForm" })) { username: @Html.TextBoxFor(m => m.UserName)
password: @Html.TextBoxFor(m => m.Password)
}
我试过的其中一件事是
$(document).ready(function () { $("#loginForm").validate({ invalidHandler: function (form, validator) { var errors = validator.numberOfInvalids(); if (errors) { alert(errors); } } }); });
我无法弄清楚如何使这项工作。 我只是想允许正常validation并显示错误,但有机会再做一点。
一种解决方案是修改jquery.validate.unobtrusive.js中的onErrors函数。 该function非常易读。
经过多次搜索:
我在jQueryvalidation器初始化之后发现了这个Add InvalidHandler这引出了我的解决方案:
$(document).ready(function () { $("#loginForm").bind('invalid-form.validate', function (form, validator) { var errors = "Login failed:\r\n"; for (var i = 0; i < validator.errorList.length; i++) { errors = errors + "\r\n\t-" + validator.errorList[i].message; } alert(errors); } ); });
这将运行正常validation并更新validation摘要并设置所有样式,然后允许我做后续的额外事情。
这对我有用……
var settings = $.data($('form')[0], 'validator').settings; if (jQuery.validator) { jQuery.validator.setDefaults({ showErrors: function (errorMap, errorList) { $.extend($.validator.defaults, settings); var message = ''; for (var i = 0; i < errorList.length; i++) { message += errorList[i].message + '\n\n'; } alert(message);//Replace your modal popup here } }); }