2016-05-18 1 views
0

私は、成功と失敗の2種類のJavaScript関数を呼び出すAjax形式を用意しています。これらの呼び出しの両方で、私はpass data back from the server to the javascriptです。次の点に注意してください。Razor MVC 5.2.3 OnFailureをajaxポストで呼び出す方法

私は私の見解

@using (Ajax.BeginForm("MyAction", null, 
new AjaxOptions 
{ 
    HttpMethod = "POST", // HttpPost 
    InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "myDiv", 
    OnSuccess = "callSuccess(data.msg)", 
    OnFailure = "callFailure(data.msg)", 
}, new { @class = "form-inline" })) 
{ 
    ... // my content 
} 

私のコントローラはポストを返す次のロジックを持っているでこれを持っています。

public ActionResult MyAction(string myString) 
    { 
     ... 
     // If error occurred 
     return Json(new { success = false, msg= "Fail" }); 
     ... 
     // If no errors 
     return Json(new { success = true, msg= "Success" }); 
    } 

何が返されても、呼び出されるのはOnSuccessです。 OnFailureに連絡する適切な方法は何ですか?

+0

あなたの例外を投げるない(有効なデータを返しますまたはエラーコードを返す)ので、常に成功関数に移動します。 –

答えて

2

をエラーステータスを送信する必要があります。さらに重要なことは、私は成功/失敗時に希望のメッセージにアクセスして表示する方法を考え出し:

私のコントローラ

public ActionResult MyAction(string myString) 
{ 
    ... 
    // If error occurred 
    return new HttpStatusCodeResult(HttpStatusCode.BadRequest, "Error occurred!"); 
    ... 
    // If no errors 
    return Json(new { success = true, msg= "Success" }); 
} 

マイビュー:

@using (Ajax.BeginForm("MyAction", null, 
new AjaxOptions 
{ 
    HttpMethod = "POST", // HttpPost 
    InsertionMode = InsertionMode.Replace, 
    UpdateTargetId = "myDiv", 
    OnSuccess = "callSuccess(data.msg)", 
    OnFailure = "callFailure(error)", // error = "Error occurred!" 
}, new { @class = "form-inline" })) 
{ 
    ... // my content 
} 
1

は、HTTPステータスコードを使用して考えてみましょう

あなたは HttpStatusCodeResultオブジェクトを返すことで(すなわち無許可、不正な要求など)をトリガーするエラーの種類に対応する適切な HTTP status codeを返す検討することもでき

あなたはWAなかった場合
// If an error occurred... 
if(error) 
{ 
    // Indicate your code and error message. This uses the Bad Request status (400) 
    return new HttpStatusCodeResult(400, "Something went wrong..."); 
} 

このクライアント側の処理これを行うには、1つの結果イベントを定義することを検討することができます(つまり、 OnSuccess = "call(data);)と、そのイベント内で、何をすべきかを決定するためにあなたのsuccessプロパティを確認してください。

function call(data){ 
     if(data.success){ 
      callSuccess(data.msg); 
     } 
     else{ 
      callFailure(data.msg); 
     } 
} 
1

はい、それは常にONSUCCESSを呼び出します。 しかし、onSuccess関数内で成功したプロパティを確認することができます。

OnSuccess : function (data) 
{      
    if(success) 
    { 
    alert('Json Return Success') 
    } 
    else 
    { 
    alert('json Result False') 
    } 

} 

そうしないと、私は両方の機能を呼び出すことができた、リオンウィリアムズポストからの助けを借りて言及リオンウィリアムズとして

+0

その場合、 'OnFailure' Ajaxオプションの目的はありますか?または、 'HttpStatusCodeResult'を返すことによってトリガーされますか? – usr4896260

+1

実行時にエラーが発生した場合は、onSuccessの代わりにOnFailureに進みます。このようなエラーも追加できます。ModelState.AddModelError( ""、 "すべての値を入力してください");私はそれが失敗することを願う –

関連する問題