GridView speichert den Status zwischen Postbacks nicht

8

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%     
Ryan 13.05.2010, 18:02
quelle

3 Antworten

9

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!

    
Ryan 14.05.2010, 13:51
quelle
2

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.

    
Kelsey 13.05.2010 22:53
quelle
1

Haben Ihre Gridview und andere Steuerelemente eine ID? Wenn Sie keine ID angeben oder wenn sich die ID zwischen Postbacks ändert, gehen die Viewstate-Änderungen verloren.

    
NibblyPig 14.05.2010 08:25
quelle