2011-04-01 49 views
22

que el uso de este Ajax.BeginFormCómo utilizar los métodos Ajax.BeginForm OnSuccess y OnFailure?

<% using(Ajax.BeginForm("Create","Mandate", 
         new AjaxOptions() { 
          OnSuccess = "GoToMandates", 
          OnFailure = "ShowPopUpError" 
         })) {%> 

<% } %> 

¿Qué necesito para escribir en el controler de atrapar a este OnSucces y onFailure.

Debido onSuccess necesito mostrar mensaje de éxito

onFailure necesito mostrar mensaje othere.

En mi controlador

Public ActionResult GetSomething(FromCollection collection) 
{ 
    if(exists == null) 
    { 
      //OnSuccess 
    } 
    else 
    { 
     //OnFailure 
    } 
} 

puede anydboy me ayude .. cómo coger esto?

Gracias

Respuesta

27

El onSuccess y onFailure parece que están esperando las funciones de devolución de llamada javascript.

<script type="text/javascript"> 
    function handleError(ajaxContext) { 
    var response = ajaxContext.get_response(); 
    var statusCode = response.get_statusCode(); 
    alert("Sorry, the request failed with status code " + statusCode); 
    } 
</script> 

<%= Ajax.ActionLink("Click me", "MyAction", 
new AjaxOptions { UpdateTargetId = "myElement", OnFailure = "handleError"}) %> 

Ejemplo de Pro ASP.NET Framework página 425

ASP.NET AjaxOptions Class


controlador

Agregado Ejemplo

La forma más simple de hacer esto sería lo que tengo aquí, pero yo recomiendo buscar en tipeó fuertemente las vistas de mvc usando algún tipo de ViewModel y tal vez analice el uso de jQuery para su ajax. Dicho esto, espero que esto funcione para ti.

if (exists) 
{ 
    ViewData["msg"] = "Some Success Message"; 
} 
else 
{ 
    ViewData["msg"] = "Some Error Message"; 
} 

return View(); 

En su opinión

<div id="myResults" style="border: 2px dotted red; padding: .5em;"> 
    <%: ViewData["msg"]%> 
</div> 
+0

Gracias NIcky, ¿qué debo escribir en mi controlador?Gracias – kumar

+1

Oh, cierto, veo lo que estás tratando de hacer allí. Creo que AjaxOptions OnSuccess y OnError están relacionados solo con la solicitud de XHR y no tienen nada que ver con el controlador. Lo pensaré rápido y luego actualizaré mi respuesta. –

+0

¿Es posible llamar a la función jquery en su lugar? – hidden

10

Yo también estaba buscando la misma respuesta, pero parece Ajax.BeginForm() .. 's caso de que no están bien documentadas o necesitan más experimentos independientes para encontrar cuando se invocan estos eventos onSuccess y onFailure. Pero obtuve una alternativa muy fácil y directa para no molestarme en configurar las propiedades OnSuccess y onFailure de AjaxOptions. Más bien, en el método de acción de su Controlador, simplemente llame al método onSuccess(), onFailure() javascript enviando ActionResult como JavaScriptResult. Por ejemplo,

Public ActionResult Create(FromCollection collection) 
{ 
    if(exists == null) 
    { 
      //OnSuccess 
      return JavaScript("OnSuccess();"); 
    } 
    else 
    { 
     //OnFailure 
     return JavaScript("OnFailure();"); 
    } 
} 

y la etiqueta Ajax.BeginForm debe ser similar

<% 
    using(Ajax.BeginForm("Create","Mandate", new AjaxOptions())) // see, no OnSuccess and OnFailure here. 

{%> 

<% } %> 

Ahora, es necesario definir el onSuccess() y onFailure() de JavaScript métodos en su página y eso es todo.

EDIT:

Estaba pensando, tal vez, onSuccess será llamado por defecto() si no hay excepción desde el servidor. Se invocará OnFailure() si se lanza alguna excepción desde el servidor. No probé este concepto todavía. Si eso es cierto, entonces, no será una buena idea practicar el envío de JavaScript ("OnSuccess();") y JavaScript ("OnFailure();"); del servidor, porque ese no será un buen patrón a seguir.

Cuestiones relacionadas