Die typische Webanwendung besteht aus mehr als einer Seite. Oft sind die Formulare so gross, das sie sich über mehrere Seiten erstrecken müssen. Nun stellt sich die Frage wie gebe ich die Daten von Seite zu Seite weiter?
Grundsätzlich können Sie den bisherigen Weg beschreiten und die benötigten Daten in Session Variablen ablegen. Auch für den Sprung auf die nächste Seite können Sie den guten alten Response.Redirect verwenden.
Wenden wir uns aber anderen vielleicht neuen Methoden zu, die ASP .NET bietet. Grundsätzlich werden alle Objekte freigegeben, sobald die Seite beim Benutzer angezeigt wird. Die Seite hat also kein Gedächtnis. Nun wäre naheliegend, wenn Sie der Page Klasse ein Proberty verpassen, das ich dies weiter nutzen kann. Dies funktioniert auch allerdings nur, wenn der Zusatz Shared verwendet wird.
Public Class makeRes Inherits System.Web.UI.Page Public Shared myStr As String Protected WithEvents Button1 As System.Web.UI.WebControls.Button Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click myStr = myStr + "1" Response.Write(myStr) End Sub End Class |
Das Ergebnis ist eine wachsende Einserkette im Brodiewser. Was passiert, wenn ein anderer User diese Seite aufruft? Sie teilen sich die Variable myStr und beide addieren auf diese. Dies zeigt auch wie ASP .NET und die Garbage Collection arbeitet. Die Klasse wird nur einmal instanziert. Das Verhalten ähnelt daher einer Application Variablen. Auch der Zugriff von anderen Seiten aus funktioniert über die Seitenklasse.
Response.Write(makeRes.myStr) |
Nur um einen Gedankenansatz zu geben, wie man komplexere Daten speichern könnte. Dazu erstellen Sie eine Klasse ( in einem Modul), die z.B. die Daten in einem SQL Server ablegt. Dann können Sie in Ihrer Page Klasse ein Objekt von diesem Typ erstellen. Die Details dazu werden an anderer Stelle beschrieben.
Nur zur Ergänzung der klassische ASP Weg.
Session("myVar")=textbox1.text response.redirect("page2.aspx") |
Das Auslesen funktioniert auf der Page2 ganz einfach.
Response.write(Session("myVar")) |
Als alternativer Wege funktionieren für den Variablentransport die gängigen Verfahren wie URL, Hidden Field und Cookie. Im Gegensatz zur Session Variable ist dies allerdings Stateless.
Allerdings sollte man sich überlegen, ob man nicht die neuen Möglichkeiten von ASP .NET nutzen sollte. Hier bieten sich z.B. die Panels an. Über diese kann man Controls gruppieren und die Anzeige der kompletten Gruppe ein und ausschalten. Zum Wechseln werden in diesem Beispiel Linkbuttons verwendet. Die Panels werden dann wechselweise angezeigt.
Natürlich will ich auch den Code nicht verheimlichen obwohl er nicht besonders spannend ist.
Private Sub LinkButton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton2.Click LinkButton1.BorderStyle = BorderStyle.None LinkButton2.BorderStyle = BorderStyle.Dashed Panel2.Visible = True Panel1.Visible = False End Sub Private Sub LinkButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LinkButton1.Click LinkButton2.BorderStyle = BorderStyle.None LinkButton1.BorderStyle = BorderStyle.Dashed Panel1.Visible = True Panel2.Visible = False End Sub |
Spannender ist schon wie es sich mit den eingegebenen Werten verhält. Beim Wechsel der Panels werden die Inhalte der Felder beibehalten. Auch der Zugriff auf die Inhalte der Felder erfolgt wie gewohnt über das Objektmodell. Das heisst obwohl der User die Felder nicht sieht, sind die Objekte weiter vorhanden.
Am Ende sieht die zuletzt beschriebene Lösung am elegantesten aus.