Web Forms verwendet viewstate, um den Steuerungsstatus beizubehalten, wenn Sie auf den Server zurückschreiben. Angenommen, Sie haben ein Textfeld und eine Schaltfläche in einem Webformular. Sie geben etwas in das Textfeld ein und klicken auf die Schaltfläche. Die Schaltfläche führt einen Post zurück zum Server aus. Wenn die Seite neu geladen wird, enthält das Textfeld immer noch den Typ, der vor dem Klicken auf die Schaltfläche eingegeben wurde, es sei denn, Sie haben das Textfeld selbst im serverseitigen Code deaktiviert.
Was tatsächlich passiert ist, war, dass die Daten in der Textbox in der versteckten Viewstate-Feld gespeichert und wieder in das Textfeld bei der Seitenaktualisierung geladen wurden. Der Viewstate sieht wie ein Durcheinander aus, weil er base64-kodiert ist. Sie können Dinge im Viewstate auch manuell speichern. Im page_load Veranstaltung Ihrer Seite nur dies tun:
this.ViewState["someVariable"] = "some value";
Nun, wenn Sie diese auf einem Formular leeren Web haben, wenn Sie die Seite laden, werden Sie eine Ansichtszustand Feld in dem HTML-Code wie das sehen Sie klebst (außer viel kleiner). Wenn Sie den Wert aus diesem versteckten Feld kopiert und in einen Viewstate-Decoder (like this one) eingefügt haben, würden Sie eine Variable mit einem Wert von "some value" sehen.
nun eine Schaltfläche auf dem Formular platzieren und in dem Klick des Buttons dies auch tun:
Response.Write(this.ViewState["someVariable"].ToString());
Sie werden sehen, „some value“ geschrieben auf der Seite. Was Sie getan haben, war etwas manuell im Viewstate zu speichern, es wurde auf die Seite in diesem versteckten Feld gerendert, dann wurde dieses versteckte Feld zurück auf den Server gepostet und Sie lesen daraus, um die Daten anzuzeigen.
Dies ist die primäre Funktionalität von Webformularen. MVC verwendet nicht viewstate.MVC stützt sich auf eine andere Technik, die als Modellbindung bekannt ist und die nicht in Ihrer Fragestellung enthalten wäre. Google "asp.net mvc model binding" für weitere Informationen darüber, wie mvc Informationen pfostenübergreifend verwaltet.
Etwas Wegthema Beispiel eines Ansichtszustand Witz:
Ich habe eine ziemlich große Community-Site namens U413. Ich habe es kürzlich neu entworfen, um ASP.net MVC 2.0 zu verwenden. Es ist eine Gemeinschaft für Programmierer und sie rämen mich die ganze Zeit für die Verwendung von Webforms. Nun, da es keine Webforms verwendet, habe ich beschlossen, einen kleinen Scherz auf ihnen zu spielen. MVC verwendet nicht viewstate, aber ich ging in ein Webformular und generierte einen Viewstate, der einige Daten enthielt und das versteckte Feld manuell in meine Ansicht in meiner MVC App einfügte.
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjkPFgIeE1U0MTNTZWNyZXRBY2Nlc3NLZXkFM2h0dHA6Ly93d3cudTQxMy5jb20vQ29udGVudC9VNDEzU2VjcmV0QWNjZXNzS2V5LmpwZ2RkpshYUvbSiUuE0YaYNBH0rvTGj4qEcquSqQeUs9ZpuIQ=" />
bereits mehrere Leute haben Snooping durch die HTML-Quelle weg Hoffnung, kleine Geheimnisse oder Exploits zu finden und stieß auf diese. Sie entschlüsselten es sofort und lachten gut. Kopiere den Wert und füge ihn in den Decoder ein, mit dem ich früher verlinkt habe, wenn du es sehen willst.
Betrachten googeln "asp.net viewstate" –
ViewState ist die beste Sache seit geschnittenem Brot! –
Sie müssen die Größe Ihrer Ansichtszustandsdaten sorgfältig verwalten. Es kann schnell summieren und wirklich Ihre Seiten aufblähen. – rboarman