2009-03-15 9 views
15

Aus einem PHP-Hintergrund Ich liebe es saubere URLs zu verwenden, um Daten von einem Dienst zum anderen zu greifen.Wie deaktiviere ich den Viewstatus für immer?

Bei einigen meiner ASP.NET-Projekte bekomme ich jedoch den schrecklichen ViewState-Parameter in meinen URLs.

Gibt es eine Möglichkeit, dies global auszuschalten?

Welchen Einfluss hat dies auf meine ASP.NET App?

Antwort

34

Sie können Ansichtszustand für die ganze Seite wie diese deaktivieren:

<system.web> 
<pages enableViewState="false" /> 

Das heißt, sollten Sie es nicht auf bekommen die URL ViewState ist ein verstecktes Feld, das mit einem Postback (das normalerweise Post verwendet) an den Server gesendet wird. Sie behält den Status der Steuerelemente bei, wenn die Seite für den Client gerendert wurde, und sendet sie bei jedem Postback. Wenn es für die Anwendung funktioniert, könntest du stattdessen post verwenden (das Problemformular benutzt sicher get), wenn du nicht Jon's Antwort ansiehst.

Klicken Sie auf diesen Link, um weitere Informationen darüber zu erhalten, wie der ViewState in den asp.net-Lebenszyklus passt: http://msdn.microsoft.com/en-us/library/ms972976.aspx.

4

Fügen Sie diese in der Datei web.config:

<Pages enableViewState="false"/> 
10

Ich hatte eine similar question beim Schreiben der Reputation Tracker.

Ich weiß nicht, wie Sie es global anders als nur ein Formular mit runat="server" Set verwenden, die mehr mit Disziplin als eine Einstellung zu tun ist. Insbesondere, wenn Sie runat="server" in einem Formular festgelegt haben, glaube ich, dass Sie immer einen Viewstate-Parameter erhalten, auch wenn Sie es überall ausgeschaltet haben, so dass Sie keine Werte erhalten. Das war sowieso meine Erfahrung.

Offensichtlich begrenzt dies Sie etwas, aber ich habe festgestellt, dass die Verwendung der HTML-Server-Steuerelemente (anstelle der ASP.NET-Steuerelemente) für entsprechende Teile von ASP.NET kann das Leben viel einfacher zu verstehen.

+0

@TFD: Während das sicherlich manchmal passiert, bin ich nicht davon überzeugt, dass es hier der Fall ist. Die Verwendung von Formularen mit runat = "server" in Verbindung mit GET-Aktionen (anstelle von POST) führt genau zu der Art von Verhalten, die der Fragesteller nicht möchte. Wie ist meine Antwort nicht relevant? –

+0

@TFD Jon hat recht, du solltest vielleicht die Links überprüfen, die er gepostet hat, bevor du an die Öffentlichkeit gehst;) – eglasius

+1

GET ist wahrscheinlich unpassend, wenn du Viewstate wirklich willst - aber es ist sehr nützlich, wenn du * viewstate * nicht brauchst. Insbesondere ist es viel einfacher, eine URL mit GET-Parametern als Lesezeichen zu speichern. –

3

Sie könnten zu ASP.Net MVC wechseln. Soweit ich weiß, verwendet es nicht den ViewState.

2

Beachten Sie jedoch, dass bestimmte Verhaltensweisen, die von den meisten ASP.NET-Webformularentwicklern erwartet werden, ohne ViewState nicht funktionieren. Der Zweck von ViewState besteht darin, die Illusion zu vermitteln, dass verschiedene Seiten- und Steuerelementeigenschaften von einer Anforderung zur nächsten bestehen. ViewState enthält nicht alle Steuerelementeigenschaften, nur die, die geändert wurden. Die Idee ist, dass ViewState diese Eigenschaften so behält, wie sie zu dem Zeitpunkt waren, als das Formular zuletzt gerendert wurde.

Ein gutes Beispiel ist ein SelectedIndexChanged Ereignis in einem Dropdown (eines, das keine Autopostback-Einstellung hat). Dies funktioniert, weil ViewState den vorherigen Index beibehält und das Formular den aktuellen Index veröffentlicht, und das Steuerelement vergleicht die beiden, um zu wissen, dass sich der ausgewählte Index geändert hat. Das ist, wenn es das SelectedIndexChanged Ereignis auslöst. Ohne ViewState wird dieses Ereignis nicht ausgelöst. Das Gleiche gilt für TextChanged Veranstaltungen usw.

Absent die GET Situation (die ich noch nie in laufen), ist das große Problem mit Viewstate es verwenden, wo es nicht benötigt wird. Ihr Grid-Steuerelement muss nicht die vorherigen Werte aller Steuerelemente in allen Zeilen beibehalten. Aktivieren Sie daher nicht ViewState.

8

Deaktivieren Sie ViewState standardmäßig mit dem Element <page> in der Datei web.config. Die Verwendung von EnableViewState="true" in der @Page Direktive funktioniert nicht mehr, sobald Sie den ViewState in der Datei web.config deaktiviert haben. Wenn Sie später entscheiden, dass Sie den ViewState für eine bestimmte Seite benötigen, können Sie ihn für diese Seite mit einem <location>-Element wieder aktivieren.

Sie müssen das gleiche für alle Masterseiten tun, die Ihre ViewState-Seite aktiviert.

Verwandte Themen