Viewstate ist beim Postback null

8

Richtig, ich habe hier etwas sehr Eigenartiges ...

ASP.NET 4 Seite mit der folgenden Eigenschaft:

%Vor%

Beim ersten Page_Load () in (! Page.IsPostBack) wird die QuickShopBagInstance aufgefüllt und ViewState gespeichert.

Wenn Sie jedoch ein Postback auf der Seite ausführen, ist der ViewState leer, wenn Sie über das Postback-Ereignis Button_OnClick () darauf zugreifen !!!

Ich habe das Request.Form überprüft und sicher ist der _Viewstate-Wert dort und wird ausgefüllt. Ich habe diesen Wert auch über einen Parser ausgeführt und er enthält die erwarteten Daten, die Seite hat ViewStateEnabled="true" und die neue .NET 4 ViewStateMode="Enabled".

Ich habe die LoadViewState-Methode überschrieben, um zu überprüfen, ob sie ausgelöst wird, scheint es nicht zu sein.

%Vor%

Ich bin wirklich verloren, was möglicherweise das Problem sein könnte. Irgendwelche Ideen?

    
James Law 02.12.2011, 11:17
quelle

3 Antworten

9

Zuerst habe ich mich geirrt, der betreffende Code war nicht in Page_Load, sondern in Page_Init, obwohl ich nichts gelesen habe, was besagt, dass Sie ViewState nicht in Init zuweisen können.

Also habe ich einen sehr einfachen Test zusammengestellt, der die Probleme, die ich habe, dupliziert ...

%Vor%

Wenn Sie "/quickshop.aspx?add1,add2,add3" angeben, wird die ListView korrekt mit den Daten aus dem qs ausgefüllt. Wenn Sie jedoch auf die Schaltfläche zum Löschen klicken, wird eine NullReferenceException ausgelöst, weil ViewState nicht vorhanden ist. t hat das QuickShopBag-Objekt beibehalten.

Wenn Sie jedoch auf die Schaltfläche "Hinzufügen" klicken, die, wie Sie sehen, zu den Werten von QuickShopBagInstance (und ViewState) dieselben Werte hinzufügt, wird die ListView korrekt ausgefüllt und wenn Sie auf die Schaltfläche Löschen klicken, funktioniert sie perfekt wie ViewState wurde beibehalten.

Wenn Sie nun das Lesen des Querystring-Bits auf Page_InitComplete im Gegensatz zu Page_Init ändern, funktioniert es einwandfrei. Die Schlussfolgerung ist also ...

SIE KÖNNEN NICHT VOR INIT_Complete IN DEN VIEWSTATE HINZUFÜGEN !!!!!!!!

Wie albern von mir, nun wer auch immer es geschrieben hat!

    
James Law 03.12.2011, 20:02
quelle
1

Sie scheinen die meisten Vorschläge bisher ausgeschlossen zu haben, deshalb habe ich eine einfache Seite mit den oben angegebenen Informationen erstellt:

Klasse

%Vor%

Code hinter

%Vor%

Markup:

%Vor%

Wie erwartet läuft das korrekt; Die überschriebene LoadViewState-Methode wird getroffen (und viewstate enthält korrekt 2 Elemente) und der Text der Schaltfläche wird aktualisiert.

Die logische Erklärung wäre, dass irgendwo anders etwas anderes vor sich geht, oder Sie es versäumt haben, eine zusätzliche wichtige Information zu liefern.

    
Dave 02.12.2011 12:03
quelle
0

Etwas, das mich in der Vergangenheit gestolpert hat, ist

  1. Etwas im ViewState auf der Seite
  2. festlegen
  3. Dann versuchen Sie, es in einem Benutzersteuerelement abzurufen. Kann es nicht finden - wo ist es hin?

Es scheint so, als ob Sie einen ViewState pro Seite haben sollten, aber jeder usercontrol behält seine eigene Version.

Könnte es so etwas sein?

Dieser SO-Link gibt eine bessere Erklärung, dass ich habe gerade getan

    
Crab Bucket 02.12.2011 12:05
quelle

Tags und Links