2016-06-20 10 views
0

Ajax.BeginFormを使用してアプリケーションを呼び出してコードを実行しています。エラーが発生したら、私が作成するカスタムエラーメッセージを返したいと思います。Ajax BeginForm - OnFailureエラーメッセージを返す

しかし、私はこれまでこれを行うことができませんでした。これは私が持っているものです。

コントローラー:

 [HttpPost] 
     [ValidateAntiForgeryToken] 
     public async Task<JsonResult> Edit(UserViewModel model) { 
      Response.StatusCode = 500; 
      return Json(new { error = "Broken" }); 
     } 

Ajax.BeginForm:

@using (Ajax.BeginForm("Edit", "User", new AjaxOptions { HttpMethod = "POST", OnSuccess = "window.location.reload();", OnFailure = "AjaxFailed(error);" }, new { @class = "form-horizontal", role = "form", @id = "EditForm" })) { 
} 

Javascriptを:

function AjaxFailed(error) { 
    debugger 
    $(".ErrorBox").prop('hidden', false); 
    $('.ModalErrorText').text("An error occured, please review the data and try again."); 
} 

私はBeginFormがキャッチしているだろうと思っただろう返されたエラーはJavascriptに渡されましたが、そうではありません。誰かが私にJavascriptのエラーメッセージを返すのを助けることができますか?

おかげ

+0

するonSuccess内の障害を処理せずにこれを行うための正しい方法を考え出す上の任意の運? – Jeff

答えて

0

は私だけするonSuccess使用してStatusCodeonFailureを削除しました。それも動作することを願って!

public async Task<JsonResult> Edit(UserViewModel model) { 
     if(success) 
      return Json(new { votes = "Success" }, JsonRequestBehavior.AllowGet); 
     else 
      return Json(new { error = "Broken" }); 
} 

スクリプト

function onSuccess(result) { 
    if (result.error) { 
      alert(result.error); //do error 
    } 
    else { 
     alert(result.votes); //do success 
    } 
} 
+0

返事をありがとう、私はこれを行うことについて考えたが、私はちょうど少し欺瞞のように感じる。乾杯! –

+0

うれしいことを聞いてうれしい!あなたは正解として選ぶことができますか? :) –

+0

私はあなたの答えを答えとして選択しました。しかし、私はそれを行う正しい方法は、アクション結果を介してJsonResultを返すことができるようにActionResultを返すことだと思います。エラーを返すには、ブラウザがエラーとして認識するステータスコードを設定する必要があります –

関連する問題