我被要求创建一个登录表单,当用户输入未通过验证时,它会弹出一个警告框。
我使用基于模型的验证连接所有内容。
例如:
public class LogonViewModel
{
[Required( ErrorMessage = "User Name is Required")]
public string UserName { get; set; }
[Required( ErrorMessage = "Password is required")]
public string Password { get; set; }
}
我在页面上有一个验证摘要:
Html.ValidationSummary()
我希望摘要显示在页面上以防用户关闭javascript。但是,如果客户端验证触发,我还想捕获验证事件,并将错误放入警报框,就像我被问到一样。
我的表格基本上就是......
@Html.ValidationSummary()
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "loginForm" }))
{
username: @Html.TextBoxFor(m => m.UserName) <br/>
password: @Html.TextBoxFor(m => m.Password) <br/>
<input type="submit" value="Login"/>
}
我尝试的其中一件事是
<script language="javascript">
$(document).ready(function () {
$("#loginForm").validate({
invalidHandler: function (form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
alert(errors);
}
}
});
});
</script>
我无法弄清楚如何使这项工作。我只想允许正常验证并显示错误,但有机会再做一点。
答案 0 :(得分:1)
一种解决方案是修改jquery.validate.unobtrusive.js中的onErrors函数。该功能非常易读。
答案 1 :(得分:0)
经过多次搜索:
我找到了Add InvalidHandler after jQuery validator initialization 这引出了我的解决方案:
$(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);
}
);
});
这将运行正常验证并更新验证摘要并设置所有样式,然后允许我做更多的后续事项。
答案 2 :(得分:0)
这为我工作......
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
}
});
}