2009-08-24 5 views
6

Aus irgendeinem Grund wurde der Viewstate meiner Anwendung gigantisch (etwa 14 Millionen Zeichen). Es fügt ungefähr 1 Minute Ladezeit hinzu. Wenn die Seite schließlich geladen wird (was nicht oft vorkommt), stürzt der Server jedes Mal ab, wenn jemand ein Formular sendet, weil "Post size exceeded allowed limits."Viewstate verstecktes Feld so groß es macht alles zum Absturz

plötzlich angezeigt wurde. Ich habe keine Felder hinzugefügt, nur ein wenig Javascript auf der Seite.

Die Leute haben mir gesagt, um zu überprüfen, Viewstate Chunking Out. Google hat mir gesagt, dies zu tun:

<pages maxPageStateFieldLength="1024"> 

... so jetzt statt einem riesigen versteckten Feld Ich habe jetzt so etwas wie 100 sehr große versteckte Felder aus. Es ist nicht genau das, wonach ich gesucht habe.

Warum würde .NET so etwas tun? Wie kann ich das beheben?

+0

Sie können ViewState für einige der Steuerelemente ausschalten? –

+2

Es ist schwer zu sagen, ohne auf die Seite zu schauen, aber versuchen Sie einen Viewstate-Decoder, um zu sehen, was in den Viewstate eingebettet ist. Sie sollten ViewState von Grids/Tabellen auch deaktivieren, wenn Sie sie nicht benötigen und vielleicht einen komprimierten ViewState zusätzlich zu GZip auf IIS implementieren implementieren. –

+0

Die Steuerelemente sind Eingabefelder und es gibt keine Möglichkeit, den Ansichtszustand für diese zu deaktivieren, und selbst wenn dies dazu führen würde, dass ich viel Code neu schreiben müsste. Es gibt auch 10 Felder, es sollte nicht so schlimm sein ... oder? – marcgg

Antwort

7

würde ich vorschlagen, ein Dienstprogramm mit Ihrem Ansichtszustand zu entschlüsseln, so dass Sie eine Vorstellung davon bekommen, was in sie tatsächlich ist (da Sie offensichtlich eine Menge Informationen hat dort Sie nicht zu brauchen scheinen.)

A viewstate decoder können Sie sehen, was in Ihrem Viewstate ist, dass Sie nicht erwarten. Dann können Sie entweder den Code ändern, das störende Steuerelement entfernen oder den Anzeigestatus (mit dem Attribut EnableViewState="false") für die Steuerelemente deaktivieren, für die er nicht aktiviert sein sollte.

+0

Danke, es sieht ziemlich cool aus, ich werde das jetzt testen – marcgg

+0

Das nervt, die Software stürzt ab, anscheinend ist die Zeichenkette zu groß. Aber jetzt weiß ich, dass mein Viewstate 13 428 604 Zeichen lang ist :) – marcgg

+0

Es läuft endlich ohne Absturz auf meinem 5. Versuch :) Es sieht so aus, als würde es alle meine Seite in den Viewstate stellen ... es ist ziemlich komisch. Ich werde versuchen, zu sehen, was ist die Logik hier und wieder auf SO – marcgg

3

Denken Sie daran, dass Steuerelemente ihre Werte über Postbacks ohne Viewstate beibehalten. Sie können ViewState oft für viele Ihrer Controls ohne Probleme deaktivieren. Um Ansichtszustand für einen bestimmten Steuersatz zu deaktivieren:

EnableViewState="false" 

Wenn Sie diese Einstellung für alle Ihre Netze und alle Steuerelemente, die Sie nicht benötigen viewsate denn es wird deutlich, die Größe zu reduzieren.

+0

Ich tat dies und es änderte nichts. Ich bin dabei.ascx-Dateien wie folgt: und da ist ziemlich viel JS drin. Könnte es verlinkt sein? Ich habe den Viewstatus für diese deaktiviert und es hat es nicht behoben – marcgg

+0

Ich habe es herausgefunden (siehe akzeptierte Antwort)! Ich akzeptierte Beska, weil es die Antwort ist, die mir geholfen hat, das Problem zu lösen, aber deine war auch hilfreich ... also +1 und vielen Dank :)! – marcgg

Verwandte Themen