Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel 11 Der Status von Seiten, Sitzungen und Applikationen
  gp 11.1 Versteckte Felder in Formularen nutzen
  gp 11.2 Der Status einer Seite: Viewstate
    gp 11.2.1 Eigene Daten im Viewstate speichern
    gp 11.2.2 Den Anzeigestatus ein- und ausschalten
  gp 11.3 Der Status einer Sitzung: Session
    gp 11.3.1 Die Klasse HttpSessionState
    gp 11.3.2 Wie ASP.NET die Probleme des klassischen ASP löst
    gp 11.3.3 Übertragung der Session-ID: Cookie oder URL
    gp 11.3.4 Den Sitzungsstatus ein- und ausschalten
    gp 11.3.5 Den Sitzungsstatus konfigurieren
    gp 11.3.6 Session-Ereignisse verwenden
    gp 11.3.7 Objekte mit Session-Scope einbinden
    gp 11.3.8 Instanzen eigener Klassen in den Sitzungsdaten speichern
  gp 11.4 Cookies verwenden
  gp 11.5 Der Status einer Anwendung: Application
    gp 11.5.1 Den Zugriff auf anwendungsweite Daten synchronisieren
    gp 11.5.2 Beschränkungen von Application-Variablen


Galileo Computing

11.2 Der Status einer Seite: Viewstate  downtop

Bei der Arbeit mit Formularen haben Sie bereits gesehen, dass sich ASP.NET zwischen den Formularaufrufen den Status der Eingabefelder merkt und in den Antwortseiten diesen Status stets auch wiederherstellt. Für dieses Verfahren nutzt ASP.NET die Technik der versteckten Felder. In einem Formular finden Sie jeweils ein verstecktes Feld mit dem Namen __VIEWSTATE, das den Status der Steuerelemente dieser Seite in codierter Form speichert. Je mehr Steuerelemente und Eingaben ein Formular enthält, umso umfangreicher wird auch der Inhalt dieses versteckten __VIEWSTATE-Feldes. Die Inhalte des __VIEWSTATE-Feldes finden Sie auf der Serverseite – in decodierter Form – im StateBag-Objekt der Seite wieder.


Galileo Computing

11.2.1 Eigene Daten im Viewstate speichern  downtop

Als Entwickler können Sie auch Ihre eigenen Daten diesem codierten __VIEWSTATE-Feld hinzufügen. Die Page-Klasse bietet über ihre geschützte Eigenschaft ViewState den Zugriff auf das StateBag-Objekt der Seite. In diesen »Sack voller Zustände« können Sie auch problemlos Ihre selbst definierten Merkmale hineinwerfen und bei Gelegenheit wieder herausholen. Das StateBag-Objekt ist prinzipiell ein Dictionary. Einem Schlüssel, der vom Typ String ist, wird ein Wert vom Typ Object zugeordnet.

Die Verwendung des StateBag-Objekts über die ViewState-Eigenschaft der aspx-Seite bietet diese Vorteile:

gp  Sie können nicht nur Strings, sondern beliebige serialisierbare Objekte speichern.
gp  Die gespeicherten Inhalte sind nicht im Klartext lesbar, sondern nur in codierter Form in der Seite enthalten.

Diesen Vorteilen steht der Nachteil gegenüber, dass die Inhalte nach wie vor ständig hin- und hertransportiert werden müssen und eine entsprechende Netzbelastung erzeugen.

Als einfaches Beispiel für die Verwendung der ViewState-Eigenschaft bietet sich ein Zähler an. Gezählt wird, wie oft jemand diese Seite bereits aufgerufen hat. Es wird also nicht gezählt, wie oft eine Seite insgesamt von allen Browsern aufgerufen wurde, sondern nur, wie oft ein bestimmter Browser die Seite aufgerufen hat. viewstate01.aspx demonstriert das Verfahren und Abbildung 11.1 zeigt die Darstellung im Browser mit dem erzeugten HTML-Quellcode.

<!-- viewstate01.aspx --> 
<%@ Page Language="VB" Debug="True" Strict="True"  %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, _
               ByVal E As EventArgs)
   Dim myCounter As Integer
   If ViewState("myCounter") Is Nothing Then
      myCounter = 1
   Else
      myCounter = CInt(ViewState("myCounter"))
   End If
   ausgabe.innerText = CStr(myCounter)
   myCounter += 1
   ViewState("myCounter") = myCounter
End Sub
</script>
<html><head><title>Viewstate-Demo</title></head>
<body><h3>Viewstate-Demo</h3>
<form runat="server" id="myForm">
Das ist der <b runat="server" id="ausgabe"></b>. 
Aufruf.<br><br>
<input type="submit" value="Weiterzählen" >
</form></body></html>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 11.1 Jede Seite hat ein StateBag-Objekt dabei, in dem Sie auch Ihre eigenen Daten zwischenspeichern können.

Die Verwendung des Status-Sacks ist offenkundig denkbar einfach. Der Ausdruck ViewState("myCounter") greift auf den Eintrag mit dem Schlüssel "myCounter" zu. Wenn der Status-Sack keinen solchen Eintrag enthält, dann definiert die Prozedur den Eintrag "myCounter", initialisiert ihn mit dem Wert 1 und gibt diesen Wert zurück.


Achtung   Im Beispiel müssen Sie die Integer-Variable myCounter sauber von dem String "myCounter" unterscheiden, der den Schlüssel für den StateBag-Eintrag bietet. Sie könnten auch jeden anderen String als Schlüssel verwenden. Es soll lediglich der Übersichtlichkeit dienen, dass der Schlüssel den gleichen Namen hat wie die verwendete Variable.

Da der Ausdruck ViewState("myCounter") eine Object-Variable zurückgibt, muss für die Zuweisung zur Integer-Variablen ausdrücklich konvertiert werden:

myCounter = CInt(ViewState("myCounter"))

Entsprechendes gilt auch für die Zuweisung zum Text:

ausgabe.innerText = CStr(myCounter)

Die Konvertierungen sind nötig, da die Seite die Option Strict verwendet.


Name Typ Beschreibung
Eigenschaften
Count Integer Anzahl der StateItem-Objekte im StateBag-Objekt
Item(String) Object Default-Eigenschaft. Liefert den jeweiligen Wert. Der Schlüssel wird als String übergeben.
Keys ICollection Auflistung der Schlüssel. Lässt sich mit StateBag.GetEnumerator durchlaufen
Values ICollection Auflistung der Werte
Methoden
Add (String, Object) StateItem Fügt einen neuen Eintrag hinzu
Clear Entfernt alle Einträge
GetEnumerator IDictionaryEnumerator Gibt einen Enumerator zurück, der alle Schlüssel-Wert-Paare durchläuft
IsItemDirty Boolean Überprüft einen StateBag-Eintrag, um auszuwerten, ob er seit dem Aufruf von Control.TrackViewState geändert wurde
Remove(String) Entfernt den Eintrag mit dem als String übergebenen Schlüssel

Tabelle 11.1 Eigenschaften und Methoden des StateBag-Objekts


Galileo Computing

11.2.2 Den Anzeigestatus ein- und ausschalten  toptop

Wenn eine Anwendung sich den Anzeigestatus merkt, dann nutzt sie Ressourcen auf dem Server und sie verbraucht Übertragungskapazität. Unter Umständen ist der Erhalt des Zustands aber nicht erforderlich. Ein Beispiel sind Listensteuerelemente, deren Inhalt stets aus einer Datenbank gelesen wird. Wenn Sie für dieses Steuerelement zusätzlich den Anzeigestatus speichern, erzeugen Sie je nach Länge der Liste unter Umständen eine erhebliche Netzbelastung.

Sie haben verschiedene Möglichkeiten, den Anzeigestatus ein- oder auszuschalten. Sie können den Viewstate für eine komplette Seite deaktivieren, indem Sie in der Page-Direktive das Attribut EnableViewState="false" angeben:

<%@ Page Language="VB" EnableViewState="false" %>

Außerdem können Sie den Viewstate über die Eigenschaft EnableViewState gezielt für einzelne Steuerelemente ein- und ausschalten. Diese Eigenschaft gilt dann für das jeweilige Element und alle anderen Elemente, die in ihm enthalten sind.

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de