2011-11-07 17 views
14

Chcę dodać więcej paramów do mojego wywołania OnSuccess (, ale zachowaj zmienną kontekstową ajax).
Co zrobiłem to:ASP.NET - Ajax.BeginForm Odwołanie OnSupcess z parametrami

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

Funkcja JS:

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

Ale ajaxContext jest null.
Jak to zrobić?

Odpowiedz

27

Ponieważ używasz get_response() Zgaduję, że nie używasz dyskretny javascript rzeczy (w MVC3 masz ustawione HtmlHelper.UnobtrusiveJavaScriptEnabled = false) i jesteś odnosząc się do MicrosoftAjax, JS i MicrosoftMvcAjax.js plików. W takim przypadku wystarczy porzucić słowo kluczowe new.

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

Jeśli używasz MVC3 dyskretną obsługę JavaScript z jquery.unobtrusive-ajax.js następnie można użyć zamiast domyślnie dostępne xhr i data zmienne.

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

W swojej obsługi nie będzie potrzeby korzystania get_response().get_object() ponieważ rozszeregować danych JSON będzie przekazany do obsługi bezpośrednio.

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

Perfectm dzięki! – Shazam

+1

Nie śledzę, jak powinieneś używać parametru "data". To po prostu wyrzuca wyjątek dla mnie mówiąc "dane nie są zdefiniowane". – rossisdead

+0

@rossisdead Wiem, że to jest stare, ale wiem, że wielu może zastanawiać się nad tym samym. Parametr 'data' jest zwracany z serwera, zazwyczaj kontroler MVC lub Web API. Ten wynik może zostać zwrócony jako 'JsonResult' lub po prostu' Json' i możesz uzyskać dostęp do właściwości tego obiektu z wyniku. –

9

OnSuccess odbiera data, status, xhr z serwera:

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

, a następnie jej równoważna metoda JavaScript byłoby:

function myJsMethod(data, status, xhr) { 
} 

Teraz kontroler powinien zwrócić:

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

Następnie w myJsMethod będziesz mieć dostęp do data.param1 i tak dalej.

+3

Gdzie mogę znaleźć źródło tych informacji? Jakie są standardowe parametry dla OnFailure na przykład? –

+0

Weź łup na jego kod źródłowy @github: https://github.com/aspnet/jquery-ajax-unobtrusive – VahidN

Powiązane problemy