wake-up-neo.com

ViewState Vs Session ... verwaltet das Objekt während des gesamten Lebenszyklus der Seite

Kann jemand bitte den Unterschied zwischen ViewState und Session erklären?

Im Besonderen möchte ich wissen, wie Sie ein Objekt am besten über den gesamten Lebenszyklus meiner Seite verfügbar halten können (Mitglieder durch Postbacks fortlaufend einstellen).

Ich verwende zurzeit Sitzungen, um dies zu tun, aber ich bin nicht sicher, ob es der beste Weg ist.

Zum Beispiel:

SearchObject searchObject;
protected void Page_Load(object sender, EventArgs e)
{
     if(!IsPostBack)
     {
         searchObject = new SearchObject();
         Session["searchObject"] = searchObject;
     }
     else
     {
         searchObject = (SearchObject)Session["searchObject"];
     }
}

das erlaubt mir, mein searchObject an anderer Stelle auf meiner Seite zu verwenden, aber es ist etwas umständlich, da ich meine Session-Variable zurücksetzen muss, wenn ich Eigenschaften usw. ändere.

Ich denke, dass es einen besseren Weg geben muss, um dies zu tun, damit .NET das Objekt nicht jedes Mal neu lädt, wenn die Seite geladen wird, sondern es auch in den globalen Bereich der Page-Klasse stellt.

38
Kyle

Wenn das Suchobjekt nicht sehr groß ist, verwenden Sie einen ViewState. Ein ViewState ist perfekt, wenn das Objekt nur für den Lebenszyklus der aktuellen Seite verwendet werden soll.

Ein Session-Objekt kann ebenfalls verwendet werden, aber wenn sich das Suchobjekt dort befindet, wird es den Lebenszyklus der Seite länger dauern.

Eine Sache, die ich mit ViewState/Session-Objekten mache, ist das Umschließen ihres Zugriffs mit einer Eigenschaft:

public object GetObject
{
    get
    {
        return ViewState["MyObject"];
    }
    set
    {
        ViewState["MyObject"] = value;
    }
}

Ich neige dazu, es auf diese Weise sauberer zu finden. Ändern Sie einfach den obigen Code, um Ihren Anforderungen zu entsprechen.

57
Jason Evans

Viewstate wird in erster Linie pro Seite angegeben, bei der die Sitzung in der gesamten Anwendung während der aktuellen Sitzung vorhanden ist. Wenn Ihr Suchobjekt über mehrere Seiten bestehen bleiben soll, ist die Sitzung der richtige Weg.

Zweitens wird Viewstate bei jedem Postback als verschlüsselter Text zwischen dem Browser und dem Server übertragen. Je mehr Daten Sie also im Viewstate speichern, desto mehr Daten werden jedes Mal vom Client gesendet und kommen vom Client zurück, während die Sitzung serverseitig gespeichert wird Das einzige, was hin und her geht, ist eine Sitzungskennung, entweder als Cookie oder in der URL. 

Ob die Sitzung oder der Ansichtsstatus der richtige Ort zum Speichern Ihres Suchobjekts ist, hängt davon ab, was Sie damit tun und welche Daten darin enthalten sind. Die obige Erklärung hilft Ihnen hoffentlich bei der Auswahl der richtigen Methode.

26
Ben Robinson

Der Ansichtsstatus ist seitenabhängig, während der Sitzungsstatus browserspezifisch ist. Sie können die Daten nicht über den Ansichtsstatus von einer Seite an eine andere Seite übergeben. Sie müssen jedoch den Sitzungsstatus verwenden. Jede Sitzung hat eine eindeutige ID, wobei "Als Ansichtsstatus" gespeicherte Daten in ausgeblendeten Feldern auf der Seite selbst gespeichert hat. Die Sitzung speichert die Daten auf der Serverseite, wobei in "Ansicht" -Statusdaten auf der Seite gespeichert werden Machen Sie die Seite schwer und die Anwendung langsam. Jedes Steuerelement verfügt standardmäßig über den Ansichtsstatus "true", in dem der Status (Steuerungsstatus) gespeichert wird. Wir können ihn einfach aktivieren oder deaktivieren, indem Sie enableviewstate = false festlegen

0
Bhawesh Deepak