TOC

This article has been localized into German by the community.

Zustand:

Zustand der Ansicht

Ein weiterer Ansatz zum Speichern von Daten für den Benutzer ist der ViewState. Wie an anderer Stelle in diesem Lernprogramm beschrieben, ermöglicht ViewState ASP.NET, Formularfelder bei jedem Postback auf dem Server erneut auszufüllen, um sicherzustellen, dass ein Formular nicht automatisch gelöscht wird, wenn der Benutzer auf die Senden-Schaltfläche klickt. All dies geschieht automatisch, sofern Sie es nicht ausschalten. Sie können den ViewState jedoch auch für Ihre eigenen Zwecke verwenden. Beachten Sie jedoch, dass auf Cookies und Sitzungen von allen Ihren Seiten auf Ihrer Website zugegriffen werden kann, ViewState-Werte jedoch nicht zwischen den Seiten übertragen werden. Hier ist ein einfaches Beispiel für die Verwendung des ViewState zum Übertragen von Werten zwischen Postbacks:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>ViewState</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:TextBox runat="server" id="NameField" />
        <asp:Button runat="server" id="SubmitForm" onclick="SubmitForm_Click" text="Submit & set name" />
        <asp:Button runat="server" id="RefreshPage" text="Just submit" />
        <br /><br />
        Name retrieved from ViewState: <asp:Label runat="server" id="NameLabel" />
    </form> 
</body>
</html>

Der Code dahinter:

using System;
using System.Data;
using System.Web;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(ViewState["NameOfUser"] != null)
            NameLabel.Text = ViewState["NameOfUser"].ToString();
        else
            NameLabel.Text = "Not set yet...";
    }

    protected void SubmitForm_Click(object sender, EventArgs e)
    {
        ViewState["NameOfUser"] = NameField.Text;
        NameLabel.Text = NameField.Text;
    }
}

Führen Sie das Projekt aus, geben Sie Ihren Namen in das Textfeld ein und klicken Sie auf die erste Schaltfläche. Der Name wird im ViewState gespeichert und auch auf das Label gesetzt. Hier gibt es überhaupt keine Magie. Drücken Sie nun den zweiten Button. Dieser macht eigentlich gar nichts, er sendet nur etwas zurück zum Server.

Wie Sie feststellen werden, enthält das NameLabel weiterhin den Namen, das Textfeld jedoch auch. Das erste ist wegen uns, während das Textfeld von ASP.NET selbst verwaltet wird. Versuchen Sie, den Wert zu löschen und drücken Sie die zweite Taste erneut. Sie werden sehen, dass das Textfeld jetzt gelöscht ist, aber unser Namenslabel behält den Namen bei, da der Wert, den wir im ViewState gespeichert haben, noch vorhanden ist!

ViewState eignet sich gut zum Speichern einfacher Werte für die Verwendung im Formular. Wenn Sie jedoch komplexere Daten speichern und von Seite zu Seite behalten möchten, sollten Sie Cookies oder Sitzungen verwenden, wie in den vorherigen Kapiteln beschrieben.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!