1

タイプ「JsonResult」のアクションメソッドがあります。私は ajax post を使用して呼び出します。アクション メソッドからのカスタム エラーを ajax ポストに戻し、それらのエラーを検証の概要として表示したいと考えています。

[HttpPost]
public JsonResult RegisterUser(RegistrationModel model)
{
   //if username already exists return custom error to be displayed on view      
   //under validation summary
   // control should go back to error function with message to be displayed.
}


   $.ajax({
        url: url,
        type: 'POST',
        dataType: 'json',
        data: ko.toJSON(model),
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            success(result)
        },
        error: function (req, status, error) {
            error(req, status, error);
        }
    });

  function success(result) {  
    //Do Something
  }

  function error(req, status, error) {
       //Display error messages under validation summary.
  }
4

1 に答える 1

4

私の理解では、ajax の投稿を行う場合、モデルの検証に合格したかどうかは気にせず、サーバーからの応答を受け取ったかどうかのみを気にします。サーバーから例外がスローされた場合、それは ajax エラー関数にヒットします。

そこで、検証ステータスを知らせる json オブジェクトを返します。

if(!ModelState.IsValid){
        var modelStateErrors = this.ModelState.Keys.SelectMany(key => this.ModelState[key].Errors);
        var message = "Please fix the following: " + Environment.NewLine;

        foreach (var modelStateError in modelStateErrors)
        {
            message += modelStateError.ErrorMessage + Environment.NewLine;
        }

     return Json(new {success = false, response = message})
}


 // Do other logic

return Json(new {success = true, response = "Successful message"})

このオブジェクトを返すと、次の Javascript を実行できます

success: function (result) {
            if(result.success === true){
                 $('#status-div').empty().html('<div class="success">' + result.response + '</div>');
            }
            if(result.success === false){
                 $('#status-div').empty().html('<div class="fail">' + result.response + '</div>');
            }

        }
于 2013-04-12T23:26:49.820 に答える