2011-11-07 10 views
14

Desidero aggiungere altri parametri alla mia chiamata OnSuccess (ma mantenere la variabile di contesto ajax).
Quello che ho fatto è:ASP.NET - Ajax.BeginForm Risposta OnSuccess con parametri

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

La funzione JS:

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

Ma ajaxContext è nullo.
Come faccio?

risposta

27

Dal momento che si sta utilizzando get_response() Sto indovinando che non si sta usando la roba javascript discreto (in MVC3 che hai impostato HtmlHelper.UnobtrusiveJavaScriptEnabled = false) e il gioco è riferimento i file MicrosoftAjax, js e MicrosoftMvcAjax.js. In questo caso, devi solo eliminare la parola chiave new.

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

Se si utilizza il MVC3 discreto supporto di JavaScript con jquery.unobtrusive-ajax.js quindi è possibile utilizzare i implicitamente disponibili xhr e data variabili, invece.

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

Nel vostro gestore non ci sarebbe alcuna necessità di utilizzare get_response().get_object() dal momento che i dati JSON deserializzata sarebbero passati al tuo gestore direttamente.

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

Perfectm, grazie! – Shazam

+1

Non sto seguendo come si suppone di utilizzare il parametro "dati". Mi dà solo un'eccezione dicendo "i dati non sono definiti". – rossisdead

+0

@rossisdead So che questo è vecchio, ma so che molti potrebbero chiedersi la stessa cosa. Il parametro 'data' è ciò che viene restituito dal server, generalmente un controller MVC o Web API. Questo risultato può essere restituito come 'JsonResult' o semplicemente' Json' e puoi accedere alle proprietà di quell'oggetto dal risultato. –

9

OnSuccess riceve data, status, xhr dal server:

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

E poi il suo metodo JavaScript equivalente sarebbe:

function myJsMethod(data, status, xhr) { 
} 

Ora il controller dovrebbe restituire:

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

Quindi in myJsMethod si avrà accesso a data.param1 e così via.

+3

Dove posso trovare la fonte di queste informazioni? Quali sono i parametri standard per OnFailure per esempio? –

+0

Prendi un bottino con il suo codice sorgente @github: https://github.com/aspnet/jquery-ajax-unobtrusive – VahidN

Problemi correlati