16 Stimmen

ViewState nur in Safari ungültig

Eine der Websites, die ich betreue, stützt sich stark auf die Verwendung von ViewState (es ist nicht mein Code). Auf bestimmten Seiten, auf denen die ViewState besonders aufgebläht ist, wirft Safari eine "Validation of viewstate MAC failed" Fehler.

Dies scheint nur in Safari zu passieren. Firefox, IE und Opera laden alle erfolgreich im gleichen Szenario.

5voto

Rob Allen Punkte 16773

Ich schließe mich der Lösung von Channel 9 an. Beachten Sie aber auch, dass Safari in einigen gehosteten Umgebungen nicht als höherwertiger Browser gilt. Möglicherweise müssen Sie ihn zur Browser-Kapazität Ihrer Anwendung hinzufügen, um einige ASP.Net-Funktionen nutzen zu können.

Das war die Hauptursache für einige Kopfschmerzen, die wir für die Website eines Kunden hatten, der das ASP-Menü-Steuerelement verwendete.

3voto

tags2k Punkte 76192

Meine erste Anlaufstelle wäre, die Elemente auf der Seite durchzugehen und zu sehen, welche Steuerelemente vorhanden sind:

  1. Funktioniert auch, wenn ich ViewState ausschalte
  2. Kann aus der Seite in einen AJAX-Aufruf verschoben werden, der bei Bedarf geladen wird

Andernfalls - und hier ist der Haftungsausschluss - habe ich diese Lösung noch nie auf einer Website verwendet, aber in der Vergangenheit, wo ich massive ViewStates in Anwendungen mit begrenztem Publikum vermeiden wollte, habe ich den ViewState in der Session gespeichert.

Bei mir hat es funktioniert, weil der Speicherbedarf für die Anzahl der Benutzer nicht so groß ist, aber wenn Sie eine sehr beliebte Website betreiben, würde ich diesen Ansatz nicht empfehlen. Wenn die Sitzungslösung für Safari funktioniert, können Sie jedoch immer den Benutzeragenten erkennen und die Einstellungen entsprechend anpassen.

2voto

Anthony Main Punkte 5944

Ich habe ein wenig nachgeforscht, und obwohl ich mir nicht ganz sicher bin, was die Ursache dafür ist, glaube ich, dass es daran liegt, dass Safari nicht die vollständige Ergebnismenge zurückgibt (und sie daher beschneidet).

Ich habe in dicussion mit einem anderen Entwickler und fand den folgenden Beitrag auf Channel 9 als gut, die empfiehlt, die Verwendung des SQL State Service zum Speichern der viewstate Vermeidung der Postback-Problem und auch Seitengröße.

http://channel9.msdn.com/forums/TechOff/250549-ASPNET-ViewState-flawed-architecture/?CommentID=270477#263702

Scheint dies die beste Lösung zu sein?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X