1

我被要求创建一个登录表单,当用户输入未通过验证时,它会弹出一个警告框。

我使用基于模型的验证将所有内容连接起来。

前任:

 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>

我不知道如何使这项工作。我只想允许正常验证和显示错误,但有机会做更多的事情。

4

3 回答 3

1

一种解决方案是修改 jquery.validate.unobtrusive.js 中的 onErrors 函数。该函数可读性很强。

于 2012-06-04T21:02:07.697 回答
0

经过大量搜索:

我在 jQuery 验证器初始化之后发现了这个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);


                }
                );
        });

这将运行正常验证并更新验证摘要并设置所有样式,然后允许我在后做额外的事情。

于 2012-06-05T15:54:35.557 回答
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
        }
    });
}
于 2014-11-08T09:31:10.783 回答