0

jquery 検証プラグイン エラー コールバックをキャプチャしようとしています。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>

次のラッパーがあるため、このスパンがいつ更新されてエラー メッセージが表示されるかを知る必要があります。

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

エラーメッセージがある場合div.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 に答える