2009-01-06 8 views
23

Gibt es eine Möglichkeit, Skript auszuführen, wenn ein UpdatePanel-Prozess abgeschlossen ist.ASP.NET - UpdatePanel und JavaScript

Ich habe eine Seite, die "Einfügen", "Kopieren" und "Bearbeiten" eines Datensatzes ermöglicht. Dies wird alles auf einem UpdatePanel getan, um eine Seitennavigation zu verhindern. An anderer Stelle auf der Seite möchte ich eine "Flash" -Meldung drucken - wie "Sie haben erfolgreich einen Datensatz eingegeben." Es ist nicht in der Nähe des UpdatePanel und ich möchte einen jQuery-Effekt auf die Nachricht verwenden, so dass es nach 4 Sekunden ausgeblendet wird. Wie kann ich ein Skript mit dem UpdatePanel zurücksenden oder nach einem UpdatePanel refresh ausführen lassen? Soll ich ein Skript in ein asp: literal schreiben? Gedanken?

Antwort

29

Ja:

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

Und dann:

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

Dokumentation here und here. Beachten Sie, dass dies für jede AJAX-Anfrage auf der Seite ausgelöst wird.

26

Dies sollte den Trick:

 <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

Vielen Dank. Ich habe es benutzt, um einen Spinner hinzuzufügen. –

2

Bruno,

Zuerst Ihre direkte Frage zu beantworten. In Ihrem Rückruf, der vom Update-Panel aufgerufen wird, sollten Sie einen RegisterStartupScript-Aufruf verwenden können, um eine JS-Methode aufzurufen. Dann in Ihrer JS Methode, würden Sie die Meldung und dann können Sie ein tun verwenden:

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

haben es nach 4 Sekunden abklingen.

Um noch einen Schritt weiter zu gehen, da Sie bereits JavaScript implementieren, würde ich Sie einladen, sich this article about UpdatePanels. Wenn möglich, würde ich versuchen, Ajax-Aufrufe zum Einfügen, Kopieren und Bearbeiten zu senden. Dies würde das Feedback Ihrer Benutzer weiter vereinfachen und würde verhindern, dass überschüssige Informationen über die Leitung übertragen werden.

+0

Ich glaube nicht, dass Aufrufe von RegisterStartupScript JS in einen AJAX-Callback einspeisen können. –

+0

Ich entferne mich von UpdatePanels und bewege mich über MS AJAX und jQuery in Richtung WCF/AJAX. Dies ist nur ein älteres Projekt, das funktioniert, aber ich dachte, ich würde ein paar UpdatePanels hinzufügen, um es schlanker zu machen. – BuddyJoe

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

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

3

Die Sys.WebForms.PageRequestManager.getInstance() Methode funktioniert bei mir auch sehr gut.

Ich arbeite mit vielen Seiten, die mehrere Updatepanels enthalten und ich habe gelernt, dass dies automatisch ausgelöst wird, auch wenn das Updatepanel nicht für die Aktualisierung benötigt wird. Also in der Funktion, die auf das Ereignis ausgelöst wird, stellen Sie sicher, dass Sie etwas wie haben:

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