2011-10-14 12 views
7

Mam Ajax.ActionLink tak:Jak mogę przekazać argument funkcji sukcesu Ajax.ActionLink

@Ajax.ActionLink("Load Related Titles", 
"AjaxLoadRelated", 
"Shared", 
new { RelatedComics = c.RelatedComic.RelatedTitles }, 
new AjaxOptions() { HttpMethod = "Get", UpdateTargetId = "divRelatedTitles", LoadingElementId = "divLoading", OnBegin = "ajaxLoadMoreBegin", OnFailure = "ajaxLoadMoreFailed", OnSuccess = "ajaxLoadMoreSuccess" }) 

Obecnie mój onSuccess funkcja wygląda tak:

function ajaxLoadMoreSuccess() { 
    ... 
} 

Chciałbym przedstawić następujący argument:

function ajaxLoadMoreSuccess(myArg) { 
    ... 
} 

Czy to możliwe?

Z góry dziękuję

Odpowiedz

8

Jest to możliwe. MVC ajax dyskretny skrypt tworzy anonimową funkcję z trzema parametrami (odpowiadającymi parametrom metody jquery ajax complete) dane, status, xhr i wywołanie tej metody z argumentami dla metody kompletnej ajax jquery. Tak na przykład:

...OnSuccess = "ajaxLoadMoreSuccess1('hello world')"

Albo

...OnSuccess = "ajaxLoadMoreSuccess2(calc(), data, status, xhr)"

<script type="text/javascript"> 
    function ajaxLoadMoreSuccess1(message) { 
     alert(message); 
    } 

    function ajaxLoadMoreSuccess2(x, data, status, xhr) { 
     $('#somespan').text('calc was ' + x + ' and data is ' + data); 
    } 

    function calc() { 
     return 1 + 2; 
    } 
</script> 
+0

Nie mogę uwierzyć, że nie zorientować, że się za siebie! Dzięki! – Sniffer

+0

Nie działa dla mnie. Próbuję przekazać 'this' (wygenerowaną kotwicę). – Shimmy

+0

Dzieje się tak, ponieważ wskaźnik "this" nie jest powiązany z elementem dom dla anonimowej funkcji lub dla funkcji 'ajaxLoadMoreSuccess'. A więc 'ajaxLoadMoreSuccess (this)', tutaj 'this' jest tym samym' this' jak dla wywołania success ajax'a (zobacz opcję '' context' (http://api.jquery.com/jQuery.ajax/)). Wewnątrz funkcji 'ajaxLoadMoreSuccess'' ten' jest powiązany z obiektem globalnym ('okno'). Możesz zmodyfikować skrypt jquery.unobtrusive-ajax.js tak, aby wiązał 'this' do elementu dom. Ale łatwiej ustawić identyfikator w tagu 'a' i użyć jquery, aby uzyskać element. W ten sposób 'ajaxLoadMoreSuccess ($ ('# my-a-id'))'. – Sperling

Powiązane problemy