Inhalt
Vorwort
1 Wie .NET und ASP.NET funktionieren
2 Installation
3 Hinweise zu VB.NET
4 »Hallo, Welt!« – Ein ASP.NET-Crashkurs
5 Die Page-Klasse
6 HTML-Serversteuerelemente
7 Validierung von Anwendereingaben
8 Webserversteuerelemente
9 Webserversteuerelemente für die Darstellung von Listen
10 Webserversteuerelemente selbst erstellen
11 Der Status von Seiten, Sitzungen und Applikationen
12 ASP.NET und Datenbanken
13 »Wer darf was?« ASP.NET und Sicherheit
14 Webanwendungen erstellen und konfigurieren
15 Leistungssteigerung durch Caching
16 Web Services
A Anhang
Index
Download (ca 14,3 MB)
Buch bestellen (29,90 EUR)
Ihre Meinung?@
<< zurück | Galileo Computing / <openbook> / Einstieg in ASP.NET | vor >>
Einstieg in ASP.NET von Matthias Lohrer
| Kapitel 11 Der Status von Seiten, Sitzungen und Applikationen
|  | 11.1 Versteckte Felder in Formularen nutzen
|  | 11.2 Der Status einer Seite: Viewstate
|  |  | 11.2.1 Eigene Daten im Viewstate speichern
|  |  | 11.2.2 Den Anzeigestatus ein- und ausschalten
|  | 11.3 Der Status einer Sitzung: Session
|  |  | 11.3.1 Die Klasse HttpSessionState
|  |  | 11.3.2 Wie ASP.NET die Probleme des klassischen ASP löst
|  |  | 11.3.3 Übertragung der Session-ID: Cookie oder URL
|  |  | 11.3.4 Den Sitzungsstatus ein- und ausschalten
|  |  | 11.3.5 Den Sitzungsstatus konfigurieren
|  |  | 11.3.6 Session-Ereignisse verwenden
|  |  | 11.3.7 Objekte mit Session-Scope einbinden
|  |  | 11.3.8 Instanzen eigener Klassen in den Sitzungsdaten speichern
|  | 11.4 Cookies verwenden
|  | 11.5 Der Status einer Anwendung: Application
|  |  | 11.5.1 Den Zugriff auf anwendungsweite Daten synchronisieren
|  |  | 11.5.2 Beschränkungen von Application-Variablen
## 11.2 Der Status einer Seite: Viewstate 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. ### 11.2.1 Eigene Daten im Viewstate speichern 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:
| Sie können nicht nur Strings, sondern beliebige serialisierbare Objekte speichern.
| 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>
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 ### 11.2.2 Den Anzeigestatus ein- und ausschalten 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.
<< zurück | <top> | vor >>
Zum Katalog
Einstieg in ASP.NET bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung

.NET-Bibliothek
| Einstieg in VB.NET
| VB.NET
| Einstieg in C#
| Visual C#
| VB.NET und Datenbanken

Empfehlung
| Einstieg in XML

Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

MyGalileo
Der Service für registrierte Leser: Info

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