Manchmal dauert es einfach ein bischen länger. Um dem Benutzer die Zeit zu vertreiben, kann man ihn mit allerlei unterhalten. Fortschrittsbalken, Prozentanzeige oder schlicht ein Mauscursor in Form einer Sanduhr.
All das ist in Webanwendungen eigentlich nicht möglich.
Vom Webserver wird die ASP.NET Seite gerendert und in einem Rutsch an den Client geschickt. Aus Performance Gründen ist das die beste Methode. Allerindg lassen sich die Daten auch Häpchenweise senden. Dazu muss der Response Buffer abgeschalten werden. Dies lässt sich am besten in der Page Direktive erledigen.
<%@ Page Language="vb" buffer=false%> |
Dann kann per Response.write eine Status Info ausgegeben werden. Damit auch ein Effekt zu erkennen ist, wird ein Wartezyklus von einer halben Sekunde eingebaut.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer For i = 1 To 100 Response.Write("test" + Str(i) + "<br>") System.Threading.Thread.Sleep(500) Next End Function |
Das Problem dabei ist, das die Ausgabe etwas unschön vor dem HTML Body Tag erfolgt. Der ein oder andere Browser mag sich daran verschlucken. Wenn Sie Ihre Anzeige genau positionieren wollen bietet sich eine Reender Funktion asu alten ASP Tagen an.
<body > <form id="Form1" method="post" runat="server"> <asp:Button id="Button1" runat="server" Text="Button"></asp:Button> <%ausgabe()%> </form> </body> |
Nun müssen Sie allerdings auch dafür sorgen, das die Funtion ausgabe nicht bei jedem Reload ungesteuert ausgeführt wird. Dafür bietet sich eine Klassen Variable an. Diese heisst in diesem Sample switch und wird einfach in PageLoad auf false gesetzt. Wenn dann z.B. ein definierter Button gedrückt wird, ändert switch seinen Wert auf true. Beim Aufbau der Page läuft dann die Ausgabe Funktion durch.
Public switch As Boolean Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load switch = False End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click switch = True End Sub Function ausgabe() If switch Then Dim i As Integer For i = 1 To 100 Response.Write("test" + Str(i) + "<br>") System.Threading.Thread.Sleep(500) Next end if End Function |
Sanduhr Popup
Auch Java Scripte lassen sich so gesteuert in den Browser mixen. Dazu braucht man zwei Scripte. mit dem ersten wird ein neues kleines Browser Fenster geöffnet. In diesem wird ganz simpel ein animiertes GIF angezeigt, das eine drehende Sanduhr zeigt.
Beim öffnen des Fensters wird ein Handle zurückgegeben, der zum schliessen per close wieder verwendet wird. Dadurch lässt sich am Ende das Popup wieder entfernen.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click switch = True End Sub Function ausgabe() If switch Then Dim i As Integer For i = 1 To 100 Response.Write("test" + Str(i) + "<br>") If i = 10 Then Response.Write("<script language='javascript'>" & _ "var options='width=100,height=100'; f=window.open('wait.aspx','PopUp',options);</script>") End If If i = 90 Then Response.Write("<script language='javascript'>f.close();</script>")
End If System.Threading.Thread.Sleep(500) Next End If End Function |
Mit der Funktion Showmodaldialog lässt sich sogar ein modaler Dialog hochfahren.
MIt einem ähnlichen Konzept lässt sich auch per Jscript ein Fortschrittsbalken steuern. Es wird statt einem Text eben jeweils ein Jscript an den Client geschickt, das z.B. in ein DIV Tag schreibt. Auch möglich wäre es einen 20 spaltige Tabelle Schritt für Schritt die Hintergrund Farbe einer Zelle zu ändern. Seien Sie kreativ und schreiben Sie Ihren Trick hier auf DevTrain.
|