2011-08-22 113 views
13

我的問題是OnFailure回調被調用的條件是什麼,運行時如何知道ajax調用失敗(ajax幫助器使用一些http響應狀態代碼來指示那?那會是什麼?)。 如果UpdateTargetId的html無論ajax調用失敗還是成功更新,那麼我應該如何正確處理錯誤。很迷茫......ASP.NET MVC3 AJAX.BeginForm AjaxOptions OnSuccess OnFailure問題

回答

18
<script type="text/javascript"> 
     function OnSuccess() { 
      alert('Success'); 
     } 
     function OnFailure(ajaxContext) { 
      var response = ajaxContext.get_response(); 
      var statusCode = response.get_statusCode(); 
      alert('Failure'); 
      Here you can do whatever you want with the div. 
      $('#targetDiv').empty(); 
     } 
    </script> 
    <div id="targetDiv"> 
    @using (Ajax.BeginForm("Index", "Home", 
     new AjaxOptions 
      { 
      UpdateTargetId = "targetDiv", 
      OnSuccess ="OnSuccess", 
      OnFailure ="OnFailure" 
      }) 
     { 
     ... 
     } 
    </div> 
+2

謝謝,這很有用,但我仍然想知道它是如何知道調用失敗的...我應該在控制器中寫些什麼... – Rn2dy

+0

如果錯誤是一個業務錯誤,例如重複名稱,你需要發送一個將被OnSuccess()接受的錯誤代碼,如果錯誤超出了你的控制範圍,它將被OnError捕獲。 –

+0

@MangeshPimpalkar如果錯誤是「超出你的控制範圍」,並且你在web.config中打開了customerrors,那麼OnFailure將永遠不會被調用。 – gangelo

0

onFailure處的AjaxOptions尋找一個JavaScript函數

<script> 
    function onError(ajaxContext) { 
     var response = ajaxContext.get_response(); 
     var statusCode = response.get_statusCode(); 
     alert("Error occured. Status code = " + statusCode); 
    } 
</script> 

在HTML寫的,當錯誤出現此得到警報。

<div id="updateDiv"> 
@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "Post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "updateDiv", OnFailure = "onError" })) 
{ 
    @*Your HTML form code goes here.*@ 
} 
</div> 
4

看來,在ASP.NET MVC 4種情況發生了變化不大。我不得不使用以下屬性來讀取響應和狀態:

ajaxContext.responseJSON 
ajaxContext.responseText 
ajaxContext.status 
ajaxContext.statusText 
相關問題