2011-10-14 12 views
7

Ho un Ajax.ActionLink in questo modo:Come faccio a passare un argomento alla funzione successo di un 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" }) 

Attualmente la mia funzione OnSuccess assomiglia così:

function ajaxLoadMoreSuccess() { 
    ... 
} 

vorrei passare un argomento ad esso:

function ajaxLoadMoreSuccess(myArg) { 
    ... 
} 

è possibile?

Grazie in anticipo

risposta

8

È possibile farlo. Lo script mvc ajax discreto crea una funzione anonima con tre parametri (corrispondenti ai parametri per il metodo jquery ajax completo) dati, stato, xhr e chiama tale metodo con gli argomenti per il metodo jquery ajax completo. Così, per esempio:

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

O

...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

Non posso credere che non ho capito che per me stesso! Grazie! – Sniffer

+0

Non funziona per me. Sto provando a passare 'this' (l'ancora generata stessa). – Shimmy

+0

Questo perché il puntatore "this'" non è associato all'elemento dom per la funzione anonima o per la funzione 'ajaxLoadMoreSuccess'. Quindi 'ajaxLoadMoreSuccess (this)', qui 'this' è lo stesso' this' come per la chiamata di successo ajax (si veda [opzione 'context'] (http://api.jquery.com/jQuery.ajax/)). E all'interno della funzione 'ajaxLoadMoreSuccess' questo' è legato all'oggetto globale ('window'). Puoi modificare lo script jquery.unobtrusive-ajax.js in modo che leghi 'questo' all'elemento dom. Ma più facilmente, imposta un id sul tag 'a' e usa jquery per ottenere l'elemento. In questo modo, 'ajaxLoadMoreSuccess ($ ('# my-a-id'))'. – Sperling

Problemi correlati