2011-11-07 13 views
14

Quiero agregar más parámetros a mi llamada OnSuccess (pero mantenga la variable de contexto ajax).
Lo que hice es:ASP.NET - Ajax.BeginForm OnSuccess devolver la llamada con los parámetros

using (Ajax.BeginForm("Register", new AjaxOptions() { 
    OnSuccess = "new function(arg){HandleBasicForm(arg , 'MyCustomVariable')}", 
    ... 

La función JS:

function HandleBasicForm(ajaxContext , myCustomVariable){ 
      var content = ajaxContext.get_response().get_object(); 
      .... 
     } 

Pero ajaxContext es nulo.
¿Cómo hago eso?

Respuesta

27

Dado que está utilizando get_response() supongo que usted no está utilizando el material Javascript discreta (en MVC3 que haya establecido HtmlHelper.UnobtrusiveJavaScriptEnabled = false) y que está haciendo referencia a los archivos MicrosoftAjax, JS y MicrosoftMvcAjax.js. Si ese es el caso, solo debe soltar la palabra clave new.

using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "function(arg){HandleBasicForm(arg , 'MyCustomVariable')}"}) 

Si está utilizando el soporte javascript MVC3 discreta con jquery.unobtrusive-ajax.js continuación, puede utilizar las implícita disponibles xhr y data variables en lugar.

using (Ajax.BeginForm("Register", new AjaxOptions() { OnSuccess = "HandleBasicForm(data, 'MyCustomVariable')"}) 

En su controlador no habría necesidad de utilizar get_response().get_object() ya se pasarían los datos JSON deserializados a su manejador directamente.

function HandleBasicForm(data, myCustomVariable){ 
    var someValue = data.someProperty; //work with data object returned 
    .... 
} 
+0

¡Perfecto gracias! – Shazam

+1

No estoy siguiendo cómo se supone que debes usar el parámetro "datos". Simplemente arroja una excepción para mí diciendo "datos no definidos". – rossisdead

+0

@rossisdead Sé que esto es viejo, pero sé que muchos se estarán preguntando lo mismo. El parámetro 'data' es el que devuelve el servidor, generalmente un controlador MVC o Web API. Este resultado se puede devolver como 'JsonResult' o simplemente' Json' y puede acceder a las propiedades de ese objeto desde el resultado. –

9

OnSuccess recibe data, status, xhr desde el servidor:

OnSuccess = "myJsMethod(data, status, xhr)" 

Y entonces su método JavaScript equivalente sería:

function myJsMethod(data, status, xhr) { 
} 

Ahora el controlador debe devolver:

return Json(new { param1 = 1, param2 = 2, ... }, JsonRequestBehavior.AllowGet); 

Luego en myJsMethod tendrá acceso a data.param1 y así sucesivamente.

+3

¿Dónde puedo encontrar la fuente de esta información? ¿Cuáles son los parámetros estándar para OnFailure, por ejemplo? –

+0

Tome un botín en su código fuente @github: https://github.com/aspnet/jquery-ajax-unobtrusive – VahidN

Cuestiones relacionadas