wake-up-neo.com

Viewstate konnte nicht geladen werden. Die Kontrollstruktur, in die Viewstate geladen wird

Ich erhalte die folgende Fehlermeldung nach einem HTTP POST in einem ASP.NET-Formular, das in einem UserControl gehostet wird:

Viewstate konnte nicht geladen werden. Die Kontrollstruktur, in die der Viewstate geladen wird, muss mit der Kontrollstruktur übereinstimmen, die zum Speichern des Viewstates während der vorherigen Anforderung verwendet wurde. Wenn Sie beispielsweise Steuerelemente dynamisch hinzufügen, müssen die während eines Postbacks hinzugefügten Steuerelemente dem Typ und der Position der Steuerelemente entsprechen, die während der ursprünglichen Anforderung hinzugefügt wurden.

Hier sind zusätzliche Infos:

  • Ich lasse .NET 4.5 RC laufen
  • Es ist eine Umbraco 4.7-basierte Website
  • Auf meiner lokalen Entwicklungsmaschine funktioniert das Formular perfekt
  • Dieser Fehler tritt nur auf dem Staging-Server auf, der über .NET 4.5 (nur), MSSQL 2012 Express, IIS 7.5, Windows 7 verfügt (ich weiß, es ist noch kein echter Server, eines Tages vielleicht ...)
  • Der Server ist nicht Teil einer Webfarm (oder eines Gartens, da dies nicht relevant sein sollte)
  • Das Benutzersteuerelement do render steuert dynamisch

Ich habe alle aktuellen Service Packs angewendet ... Ich habe jetzt die Ideen ausgehen! Ich habe es sogar neu gestartet und auch ein reiches Stück über den Server mit einem Lied und einem speziellen Tanz ohne Erfolg aufgeführt.

12
krisdyson

OK, also die Antwort ist wörtlich: "Richten Sie einen neuen Server mit derselben Software ein und versuchen Sie es erneut" und es funktioniert jetzt. 

1
krisdyson

Wichtig beim dynamischen Hinzufügen von Steuerelementen ist das Ereignis, das Sie hinzufügen.

Wenn Sie Steuerelemente für Ereignisse hinzufügen, die nach dem Laden auftreten, sind sie Teil des Ansichtsstatus, den Sie an den Client senden.

Sie müssen diese Steuerelemente erneut hinzufügen, bevor LoadViewState aufgerufen wird.

Wenn Sie auf Fälle stoßen, in denen die Entscheidung, welche Steuerelemente hinzugefügt werden sollen, selbst in ViewState oder dem Wert eines Steuerelements gespeichert ist, sollten Sie sich daran erinnern, dass ViewState geladen ist. Diese Daten sind in Request.Params verfügbar.

Siehe den Lebenszyklus der asp.net-Seite

Page life cycle

20
nunespascal

Ich habe gerade EnableViewState="false" zu meinem Platzhalter für die Seite hinzugefügt. Ich hoffe es funktioniert auch für dich.

19
Hooman

Dieser Fehler tritt hauptsächlich während des Ansichtsstatus auf. Änderung: Von einer Vorlage in eine andere Vorlage, z. B. bei Artikelvorlage, Elementvorlage bearbeiten, in Steuerelementen wie Formularansicht, Listenansicht, Detailansicht, Rasteransicht in ASP Frameworks);

Wenn Sie aus Kontrollzuständen wechseln, sagen Sie Item Template ---> Edit Template Die folgenden Änderungen würden sich ändern

1) Steuerelemente ändern sich (ihre ID & Status)

2) Ihre Positionen ändern sich.

Während der Transformation der Ansicht, wenn ein Beitrag zurück auftritt, wird als Fehler angezeigt 

Viewstate konnte nicht geladen werden. Die Kontrollstruktur, in die Viewstate gesetzt ist, ist geladen werden ....

wenn Sie ein separates Steuerelement für die Datenbindung verwenden, wie (Schaltfläche, link_button_Image_button -Ereignisse), wird dieser Fehler gemeldet.

Um diesen Fehler zu vermeiden, >>> Sobald der Status von einer Vorlage in eine andere innerhalb der Methode geändert wird, rufen Sie die Datenquellenbindung auf (Nicht während des Klickens oder bei Post-Backing-Ereignissen aufrufen).  

4

Ich füge "name" -Attribut mit demselben Wert wie id hinzu, dann ist dieses Problem weg. 

<input type="button" id="extractBomInfoBtn" name="extractBomInfoBtn" value="Extract" class="button   textonly" />
0
David

In meinem Fall manipulierte ich die . Text Eigenschaft eines asp: Literal beim Laden der Seite, was das Problem verursachte. In allen anderen Fällen verursachte dies nie einen Fehler im Ansichtsstatus, aber in diesem speziellen Fall änderte ich den Wert . Text in ein HTML-Element.

Folgendes hat den Fehler verursacht:

<asp:Literal ID="SvgIcon" runat="server" />

SvgIcon.Text = "<svg version=\"1.1\" id=\"Layer_1\" bla bla />"

Ich konnte den Fehler beheben, indem ich EnableViewState = "false" explizit zum Steuerelement hinzufügte:

<asp:Literal ID="SvgIcon" runat="server" EnableViewState="false" />
0
Versatile

Überprüfen Sie, ob Sie die Bindungsmethode des Steuerelements direkt in Ihrem Seitenladeereignis haben. Dies kann dieses Problem verursachen.

0
SubqueryCrunch

Ich hatte das gleiche Problem. Dieses Problem trat am Client-Ende auf, trat aber in meinem lokalen System nicht auf. Nach stundenlangem Googeln hatte ich EnableViewState = "false" in mein Tabellen-Tag in der aspx-Seite geschrieben, das alle dynamischen Steuerelemente enthält und dann entfernt wurde alle viewstate-Variablen. Stattdessen erstellte ich einige versteckte Textfelder auf der aspx-Seite und akzeptierte DB-Werte in den Code dahinter und verwendete sie in meinem gesamten Code. Es löste dann mein Problem ... Aber ich konnte immer noch nicht herausfinden, was genau das Problem war.

0
user6785638

Sie können einen neuen PlaceHolder pro UserControls hinzufügen 

OR

Sie können enableviewstate=false im Steuerelement festlegen, wenn Sie viewstate nicht benötigen

0
Omid Farvid

Dies kann passieren, wenn Sie SaveViewState in Ihrem Steuerelement überschreiben, LoadViewState jedoch nicht überschreiben. 

0
David Kemp

In meinem Fall hatte ich eine Rasteransicht mit (OnPageIndexChanging) -Ereignis Wenn ich auf eine Seite klicke, geschieht nichts, bis ich zweimal darauf klicke!

Ich habe die Datenquelle aktualisiert, bevor Sie den neuen Seitenindex eingestellt haben.


Das habe ich falsch gemacht

grd.DataSource = data;
grd.DataBind();
grd.PageIndex = e.NewPageIndex;

Das ist der richtige Weg

grd.PageIndex = e.NewPageIndex;
grd.DataSource = data;
grd.DataBind();
0
iYazee6