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.
@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? –
@TFD Jon hat recht, du solltest vielleicht die Links überprüfen, die er gepostet hat, bevor du an die Öffentlichkeit gehst;) – eglasius
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. –