0

我正在尝试捕获 jquery validate 插件错误回调。我知道如果我直接调用 validate,您可以轻松地参与其中:

$('#form').validate({ 
    invalidHandler: function(form, validator) {
       var errors = validator.numberOfInvalids();
       if (errors) {
           //etc
       }
    }
});

但我不是。相反,我的表单被提交到服务器,如果!Model.IsValid服务器返回无效模型并使用错误消息填充占位符:

<span data-valmsg-replace="true" data-valmsg-for="Email" class="field-validation-error">This field is required</span>

我需要知道这个 span 何时用错误消息更新,因为我有以下包装器:

<div class="errorContainer">
     @Html.ValidationMessageFor(m => m.Email)  /*This is the span above*/
</div>

Wherediv.errorContainer { visibility : hidden; }和我只需要在出现错误消息时使其可见(因为它有背景并且不属于,除非里面有错误)。

我怎样才能做到这一点?最佳解决方案是我可以响应来自客户端和服务器端验证的错误,因为我计划在确保覆盖服务器端之后构建客户端验证。我想更好的问题是,有没有办法让invalidHandler服务器返回错误的回调触发?

4

1 回答 1

0

我只是想到了这一点,还没有测试过,但我认为它会起作用。会回来汇报的。谢谢巴尼,你的评论给了我一个灯泡。

$.ajax({
    url : '/Account/Login',
    dataType: $('#form').serialize(),
    beforeSend : function(xhr, opts){

        ... form validation ...

        if(formNotValid){
             xhr.abort(); /*Abort request*/
             /*Display client generated errors*/
        }

    },
    success: function(result){  // return from server is a JsonResult(new { success = true/false, viewResult = this.RenderPartialView("Login", model)})  

        if(result.success){
            //No errors
        }
        else{

            /*Display server generated errors*/

            $('#form').empty().html(result.viewResult);
            $('span.field-validation-error').each(function () {
                 $(this).parent().css({ "visibility": "visible" });
            });

            $('span.field-validation-valid').each(function () {
                 $(this).parent().css({ "visibility": "hidden" });
            });
        }


    }
});

注意:this.RenderPartialView("Login", model) 是在这里找到的自定义扩展方法

于 2012-12-22T20:45:35.013 回答