DevTrain

Autor: Hannes Preishuber

Bitte Warten: Benutzer mit Wartemeldungen versorgen.

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.

 

 

 


Erfasst am: 30.07.2003 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=866
© Copyright 2003 ppedv AG - http://www.ppedv.de