Ich habe eine einfache ASP-Seite mit datengebundenem Gitter (gebunden an eine Objektquelle). Das Raster befindet sich auf der Seite eines Assistenten und hat für jede Zeile ein Auswahlfeld.
In einer Stufe des Assistenten binde ich die GridView:
%Vor%Und wenn die Schaltfläche "Beenden" angeklickt wird, durchblätter ich die Zeilen und überprüfe, was ausgewählt ist:
%Vor%Aber in diesem Stadium GridViewMatches.Rows.Count = 0! Ich verbinde das Raster nicht neu, ich sollte es nicht brauchen, oder? Ich erwarte, dass der Sichtstaat den Staat erhält. (Wenn ich das Gitter erneut binde, werden meine Auswahlkästchen gelöscht)
Hinweis: Diese Seite fügt auch Benutzersteuerelemente in der OnInit-Methode dynamisch hinzu. Ich habe gehört, dass es sich mit dem View-Zustand vermischen könnte, aber soweit ich das beurteilen kann, mache ich es richtig und der Viewstate für diese zusätzlichen Kontrollen scheint zu funktionieren (die Werte bleiben zwischen den Postbacks bestehen)
Vielen Dank im Voraus für jede Hilfe!
Ryan
UPDATE: Könnte das damit zu tun haben, dass ich die Datenquelle programmatisch setze? Ich fragte mich, ob die ASP-Engine das Raster während des Seitenlebenszyklus an eine Datenquelle gebunden hatte, die noch nicht definiert war. (Auf einer Testseite ist die GridView "automatisch" datengebunden. Ich möchte nicht, dass das Gitter wieder gebunden wird. Ich möchte nur die Werte aus dem Viewstatus des vorherigen Posts!
Außerdem habe ich das im asp-Header: ViewStateEncryptionMode="Nie" - das war eine gelegentliche 'Invalid Viewstate Validation MAC'-Nachricht zu lösen
Als Referenz ist meine GridView wie folgt definiert:
%Vor%Das Iterieren der Steuerelemente im PreInit-Ereignis (um festzustellen, ob die Schaltfläche "ein anderes Steuerelement hinzufügen" oder "ein anderes Steuerelement entfernen" gedrückt wurde) macht den Ansichtszustand ungültig !!
Hier ist die Methode, die von PreInit
aufgerufen wird %Vor%(Ich nehme keine Anerkennung für diese Methode, ich habe es im Internet gefunden)
Wenn die erste Zeile unkommentiert ist, wird der Viewstatus beibehalten.
Schrecklich!
Stellen Sie sicher, dass Ihr GridView
ViewState
standardmäßig aktiviert ist.
Vergewissern Sie sich, dass GridView
nicht zurückspringt oder gelöscht wird.
Wenn es immer noch nicht funktioniert, dann überprüfen Sie eines der übergeordneten Steuerelemente Ihres GridView
und stellen Sie sicher, dass ihr ViewState
NICHT ausgeschaltet ist. Alle übergeordneten Steuerelemente mit deaktiviertem% co_de% führen dazu, dass alle untergeordneten Steuerelemente ViewState
nicht verwenden.
Die dynamischen Steuerelemente sollten keinen Einfluss auf Ihr ViewState
haben, es sei denn, Ihr GridView
ist in einem dieser dynamischen Steuerelemente enthalten.