2010-09-17 6 views
5

Gibt es andere ViewState-Alternativen? Ich habe viel Like Session gehört, den Zustand einiger Steuerelemente der Seite gehalten und in dem Moment zerstört, in dem der Benutzer die Seite verlässt.ViewState-Alternativen in ASP.NET-Webformularen

Ich weiß, ich beschreibe ViewState selbst, aber ich bin auf der Suche nach einem Muster von Arten oder Anregungen, so dass ich ViewState insgesamt vermeiden kann.

Ein Beispiel, wie ich es verwende, ist, wo ich den Inhalt meines Gitters (eine Liste von ViewModels) zu ViewState speichern. Dies hilft zu wissen, welche Einträge verschmutzt sind, welche geändert wurden, ihre Indizes, die aktuell ausgewählten Objekte usw.

Antwort

3

Einer meiner Kollegen hat eine Möglichkeit entwickelt, Viewstate-Daten in einer Datei zu speichern. Schwere Viewstate-Daten werden also nicht zwischen Client und Server übertragen. Nur ein Schlüssel (die Viewstate-Datendatei), der die Viewstate-Datendatei darstellt, wird als Sitzungsvariable gehalten. In unseren Tests haben wir festgestellt, dass das Speichern von Viewstate in Datei die Serverantwortzeit durch Verringern der Viewstate (die damals sehr groß war) verringerte.

In diesem article unter "View State auf dem Server halten" können Sie herausfinden, wie diese Methode implementiert werden kann. Sie können Viewstate-Daten sogar in einer Datenbanktabelle speichern, was zusätzliche Flexibilität bietet, wenn sich Ihre Anwendung in einer Webfarm befindet.

+0

Obwohl dies nicht als Alternative erscheint, können Sie die Leistung Ihrer Anwendung erhöhen, ohne die gesamte Architektur zu ändern. – Zafer

+0

Ich werde das definitiv prüfen. – Jonn

0

Sie haben Session, und Sie haben Cache.

Sitzung ist pro Benutzer, Cache ist global.

Müssen Sie all das wirklich in ViewState speichern? Warum kannst du das einreichen (aber du bist sehr vage in deiner Frage, also mache ich hier ein paar Annahmen) hol dir alle alten Daten aus der Datenbank, vergleiche sie mit deinen neuen Daten und aktualisiere, was geändert wird?

+0

Ich fühle mich wohler, wenn der Staat in meinen Ansichten als ViewModels residiert. (Ich behalte nur die Dinge, die ich wirklich für das Funktionieren der Kontrolle notwendig bin.) Alles andere wird auf Postback neu erstellt. Wird es nicht von der DB kommen, die ViewModels neu erstellen und dann die Vergleiche insgesamt langsamer durchführen? – Jonn

1

Eine weitere Option ist die Komprimierung von ViewState. Es fügt der Hin- und Rückfahrt immer noch eine Menge hinzu, aber im Allgemeinen ist es minimal.

Wenn Sie mit .NET 4, gibt es einige nützliche neue Viewstate Ergänzungen:

ASP.NET 4.0: more control on viewstate management

+0

Tsk. Wir entwickeln immer noch die meisten unserer Apps in .Net 3.5. – Jonn

1

Ich glaube nicht, dass Sie einen Fall machen von Viewstate weg zu bewegen.

Wenn Sie eine große Menge an Daten speichern, treten Probleme auf, wenn Sie sie an einem anderen Ort beibehalten. Session? Es wird Ihren Speicherverbrauch sprengen, oder wenn es außer Betrieb ist, werden Sie all das bei jedem Laden/Schreiben der Sitzung verschieben (einmal pro Anfrage). Sie können natürlich versuchen, das Problem zu begrenzen, indem Sie die gespeicherten Daten so schnell wie möglich freigeben, wie TempData in asp.net MVC.

Sie können die Menge der zu speichernden Informationen minimieren, um nach geänderten Datensätzen zu suchen, indem Sie einen Zeitstempel/eine Datensatzversion eingeben. Auf diese Weise können Sie einfach prüfen, ob eine neue Version hinzugefügt wurde, und dem Benutzer sowohl anzeigen, was er zu speichern versucht hat, als auch was jemand anders gespeichert hat.