2011-10-14 18 views
7

Tengo una Ajax.ActionLink así:¿Cómo pasar un argumento a la función del éxito de 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" }) 

Actualmente mi función onSuccess se ve así:

function ajaxLoadMoreSuccess() { 
    ... 
} 

me gustaría pasar un argumento a ella:

function ajaxLoadMoreSuccess(myArg) { 
    ... 
} 

es esto posible?

Gracias de antemano

Respuesta

8

Es posible hacer. El guión discreta MVC ajax crea una función anónima con tres parámetros (que corresponden a los parámetros para el método completo jQuery Ajax) datos, estado xhr y llamar a ese método con los argumentos para el método completo jquery ajax. Así, por ejemplo:

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

No se puede creer que no darse cuenta de eso por mí mismo! ¡Gracias! – Sniffer

+0

No funciona para mí. Estoy tratando de pasar 'this' (el ancla generada). – Shimmy

+0

Esto se debe a que el puntero 'this' no está vinculado al elemento dom para la función anónima o para la función' ajaxLoadMoreSuccess'. Así 'ajaxLoadMoreSuccess (este)', 'this' aquí es el mismo' this' como para la llamada ajax éxito (ver [opción 'context'] (http://api.jquery.com/jQuery.ajax/)). Y dentro de la función 'ajaxLoadMoreSuccess'' this' está vinculada al objeto global ('window'). Puede ajustar el script jquery.unobtrusive-ajax.js para que sea obligatorio 'this' para el elemento dom. Pero más fácilmente, establezca una identificación en la etiqueta 'a' y use jquery para obtener el elemento. De esta manera, 'ajaxLoadMoreSuccess ($ ('# my-a-id'))'. – Sperling

Cuestiones relacionadas