2009-06-09 4 views
1

Voici mon point de vue partielle:Comment puis-je appeler une fonction JavaScript définie dans une vue partielle après la fin d'une requête AJAX?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<script type="text/javascript"> 
    function myFunction() { .... } 
</script> 
....other html content ... 

Sur ma page, j'ai un lien qui appelle une action du contrôleur pour rendre la vue partielle:

<%= Ajax.ActionLink(..., new AjaxOptions { ..., OnSuccess = "myFunction" }) %> 

Ceci est mon action du contrôleur: .. return PartialView ("TestControl"); ...

Je pensais que c'était assez simple. Malheureusement, je reçois l'erreur JavaScript:

Microsoft JScript runtime error: 'myFunction' is undefined.

Quand je vérifie la source de page générée après l'appel AJAX, je peux voir myFunction dans la source. Cependant, dans OnSuccess AJAX, d'une certaine manière, il ne connaît pas cette fonction. Y a-t-il quelque chose que j'ai manqué? Est-il possible que je puisse appeler le script qui fait partie de la vue partielle qui est chargée via AJAX? (J'ai essayé d'utiliser eval(), en quelque sorte je ne pouvais pas résoudre la fonction non plus.)

Merci d'avance. OnSuccess peut avoir eu lieu avant l'injection de la vue partielle dans le DOM;

Répondre

0

vous pourriez être mieux appeler myFunction immédiatement après l'avoir défini:

function myFunction(){ 
    //code here 
} 
myFunction(); 

De cette façon, myFunction obtient invoqué immédiatement après sa définition (qui, parce que la référence de script est injecté dans le DOM par la logique de vue partielle, est dès possible après la mise à jour de la vue partielle). Si myFunction fonctionne sur le contenu de la vue partielle, il se peut que vous deviez déplacer la référence de script à la fin de la vue partielle afin que le DOM sur lequel elle opère soit rendu avant l'exécution du JS.

+0

Je ne sais pas comment l'appeler directement: j'ai besoin d'attendre la requête ajax avant de pouvoir le faire. Pourriez-vous me montrer comment le faire? Merci. – user119961

+0

réponse éditée pour plus de clarté. Merci pour le suivi! –

Questions connexes