2011-08-22 19 views
13

Mi pregunta es cuál es la condición para llamar a la devolución de llamada OnFailure, cómo sabe el motor de ejecución que la llamada ajax ha fallado (el ajax helper usa un código de estado de respuesta http para indicar eso, ¿qué sería entonces?). Y si el html de UpdateTargetId se actualiza sin importar que la llamada ajax haya fallado o haya sido exitosa, entonces, ¿cómo debo manejar el error correctamente entonces? Muy confundido ...ASP.NET MVC3 AJAX.BeginForm AjaxOptions OnSuccess OnFailure Problema

Respuesta

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

Gracias, eso es útil, pero todavía quiero saber cómo sabe que la llamada falló ... ¿debería escribir algo en el controlador? ... – Rn2dy

+0

Ya si el error es un error comercial, por ejemplo, Duplicate Name, debe enviar un código de error que será aceptado en OnSuccess(). Si el error escapa a su control, se detectará en OnError. –

+0

@MangeshPimpalkar si el error está "fuera de su control" y tiene los customerrors activados en web.config, OnFailure nunca será llamado. – gangelo

0

onFailure en AjaxOptions busca una función de JavaScript

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

En HTML escribir esto para conseguir alerta cuando llegue el error.

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

De acuerdo con el sitio web oficial de MSDN: Esta función se llama si el estado de la respuesta no está en el rango de 200.

AjaxOptions.OnFailure Property

4

Parece que en ASP.NET MVC 4 cosas habían cambiado un poco. Tuve que usar las siguientes propiedades para leer la respuesta y el estado:

ajaxContext.responseJSON 
ajaxContext.responseText 
ajaxContext.status 
ajaxContext.statusText 
Cuestiones relacionadas