Frage

Von einem PHP-Hintergrund I saubere URLs Liebe unter Verwendung von Daten von einem Dienst zum anderen zu greifen.

Doch auf einige meiner ASP.NET-Projekte erhalte ich die schrecklichen Viewstate-Parameter in meinem URLs.

Gibt es eine Möglichkeit, dies global zu deaktivieren?

Was beeinflussen wird dies auf meinem ASP.NET app?

War es hilfreich?

Lösung

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 die URL bekommen. Anzeigestatus ein verborgenes Feld, das auf den Server mit einem Postback gesendet wird (die normalerweise verwendet post). Es hält den Zustand der Steuerelemente, wenn die Seite an den Client gemacht wurde, ist es mit jedem Postback senden. Wenn es für die Anwendung funktioniert wechseln Sie könnten Post verwenden, anstatt (das Problem Form sicherlich verwendet get), wenn nicht sogar einen Blick auf Jons Antwort nehmen.

überprüfen Sie diesen Link für weitere Informationen darüber, wie der Ansichtszustand paßt in das asp.net Lebenszyklus: http://msdn.microsoft.com/en-us/library/ms972976.aspx .

Andere Tipps

Ich hatte eine ähnliche Frage beim Schreiben die Reputation Tracker .

Ich weiß nicht, wie Sie das tun global es anders als zu einfach nie ein Formular mit runat="server" Satz verwenden, die als eine Einstellung mit Disziplin, mehr zu tun ist. Insbesondere dann, wenn Sie auf einem Formular runat="server" gesetzt haben glaube ich Sie immer einen Ansichtszustand Parameter erhalten werden, auch wenn Sie es überall aktiviert haben ausgeschaltet, so dass Sie keine Werte erhalten . Das war meine Erfahrung, sowieso.

Offensichtlich ist dies schränkt Sie ein wenig, aber ich habe festgestellt, dass das HTML-Server-Steuerelemente verwendet (anstelle der ASP.NET-Steuerelemente) für entsprechende Teile von ASP.NET kann viel einfacher macht das Leben zu verstehen.

Viewstate standardmäßig deaktivieren, indem ein <page> Element in der web.config verwenden. Mit EnableViewState="true" in der @Page Richtlinie wird nicht mehr funktionieren, wenn Sie die Viewstate in der web.config abzuschalten. Wenn Sie sich später entscheiden, dass Sie die Viewstate für eine bestimmte Seite benötigen, können Sie es wieder ein nur für diese Seite ein <location> Element verwendet wird.

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

  <location path="MyFolder/MyPage.aspx">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
  <location path="Site.master">
    <system.web>
      <pages enableViewState="true" />
    </system.web>
  </location>
</configuration>

Sie müssen die gleichen für alle Masterseiten tun, die Ihre Viewstate Seite Anwendungen aktiviert.

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

<Pages enableViewState="false"/> 

Sie könnten zu ASP.Net MVC wechseln. Von dem, was ich verstehe es nicht die Viewstate nicht verwendet.

Erinnern Sie jedoch, dass bestimmte Verhaltensweisen von den meisten ASP.NET Web erwartet bildet Entwickler ohne Viewstate nicht funktionieren. Der Zweck ist Viewstate die Illusion, dass verschiedene Seite und Kontrolleigenschaften bestehen aus einer Anfrage an den nächsten zur Verfügung zu stellen. Viewstate nicht alle Steuer Eigenschaften enthalten, nur diejenigen, die sich geändert haben. Die Idee ist, dass diese Eigenschaften behält Viewstate, wie sie zum Zeitpunkt der Form wurden zuletzt wiedergegeben.

Ein gutes Beispiel ist ein SelectedIndexChanged Ereignis in einem Drop-Down (eine, die nicht Autopostback gesetzt hat). Das funktioniert, weil die Viewstate vorherigen Index behält und die Form setzt den aktuellen Index und die Steuerung vergleicht die beiden, um zu wissen, dass 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, etc.

Ohne die GET-Situation (die ich noch nie in laufen), das große Problem mit Viewstate verwendet sie, wo es nicht benötigt wird. Ihr Grid-Control muss nicht die vorherigen Werte aller Kontrollen in allen ihren Reihen behalten, also nicht aktiviert Viewstate auf sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top