2009-01-06 12 views
23

Existe-t-il un moyen d'exécuter le script lorsqu'un processus UpdatePanel est terminé.ASP.NET - UpdatePanel et JavaScript

J'ai une page qui permet "d'insérer", "copier", et "éditer" d'un enregistrement. Tout cela est fait sur un UpdatePanel pour empêcher une navigation de page. Quelque part ailleurs sur la page, je voudrais imprimer un message "flash" - comme "Vous avez entré avec succès un enregistrement." Il n'est pas proche du UpdatePanel et j'aimerais utiliser un effet jQuery sur le message afin qu'il disparaisse après 4 secondes. Comment est-ce que je peux renvoyer le manuscrit avec le UpdatePanel ou l'exécuter après une actualisation de UpdatePanel? Dois-je écrire un script sur un ASP: littéral? pensées?

Répondre

29

Oui:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 

Et puis:

function endRequestHandler(sender, args) 
{ 
    // Do stuff 
} 

Documentation here et here. Gardez à l'esprit que cela se déclenchera pour chaque requête AJAX sur la page.

26

Cela devrait faire l'affaire:

 <script type="text/javascript"> 
      var prm = Sys.WebForms.PageRequestManager.getInstance(); 
      prm.add_beginRequest(BeginRequestHandler); 
      prm.add_endRequest(EndRequestHandler); 

      function BeginRequestHandler(sender, args) 
      { 
       //Jquery Call 
      } 

      function EndRequestHandler(sender, args) 
      { 
       //Jquery Call 

      } 
     </script> 
+1

Merci. Je l'ai utilisé pour ajouter un spinner. –

2

Bruno,

Tout d'abord, pour répondre directement à votre question. Dans votre rappel qui est appelé par le panneau de mise à jour, vous devriez pouvoir utiliser un appel RegisterStartupScript pour appeler une méthode JS. Ensuite, dans votre méthode de JS, vous montrer le message et vous pouvez utiliser faire:

setTimeout('$('#myMessage').fadeOut("slow")', 4000); 

pour l'avoir disparaître au bout de 4 secondes. Pour aller plus loin, puisque vous implémentez déjà JavaScript, je vous invite à consulter this article about UpdatePanels. Si possible, j'essaierais d'envoyer des appels Ajax pour faire votre insertion, copie, et éditer et ceci simplifierait davantage vos commentaires d'utilisateur et empêcherait l'excédent d'information à travers le fil.

+0

Je ne crois pas que les appels à RegisterStartupScript peuvent injecter JS dans un rappel AJAX. –

+0

Je m'éloigne de UpdatePanels et je me dirige vers WCF/AJAX via MS AJAX et jQuery. Ceci est juste un ancien projet qui fonctionne, mais j'ai pensé que j'ajouterais quelques UpdatePanels pour le rendre plus lisse. – BuddyJoe

3
var requestManager = Sys.WebForms.PageRequestManager.getInstance(); 
requestManager.add_beginRequest(function() { alert('here1') }); 
requestManager.add_endRequest(function() { alert(here2') }); 

Source: http://www.howtositecore.com/?p=36

3

La méthode Sys.WebForms.PageRequestManager.getInstance() fonctionne très bien pour moi aussi.

Je travaille avec beaucoup de pages qui contiennent plusieurs panneaux de mise à jour et j'ai appris que ceci se déclenchera automatiquement même si le panneau de mise à jour vous ne le voulez pas pour des actualisations. Donc, à l'intérieur de la fonction qui déclenche l'événement, assurez-vous d'avoir quelque chose comme:

function BeginRequestHandler(sender, args) { 
if (args.get_postBackElement().id == "ID of the Updatepanel") { 
// do stuff here 
Questions connexes