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 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.
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.
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
Ich habe gerade EnableViewState="false"
zu meinem Platzhalter für die Seite hinzugefügt. Ich hoffe es funktioniert auch für dich.
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).
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" />
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" />
Überprüfen Sie, ob Sie die Bindungsmethode des Steuerelements direkt in Ihrem Seitenladeereignis haben. Dies kann dieses Problem verursachen.
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.
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
Dies kann passieren, wenn Sie SaveViewState
in Ihrem Steuerelement überschreiben, LoadViewState
jedoch nicht überschreiben.
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();