2009-01-08 7 views
7

Wenn ich ein einfaches Stück Daten (eine ganze Zahl oder eine Zeichenkette zum Beispiel) haben könnte, dass ich in Viewstate Speichern wählen, oder eine Hiddensteuerung.Viewstate oder Hidden

Warum sollte ich eins über das andere wählen?

Viewstate

  • Fest für den Benutzer zu dekodieren (dachte nicht unmöglich), die
  • wünschenswert sein könnte

Hidden

  • Wert kann
in JavaScript verwendet werden

Gibt es andere Profis an d Nachteile?

+0

Sie können auch Daten im Session-Objekt speichern –

+0

Ja, ich könnte in Session speichern, aber in diesem Szenario sind die Daten nur für die betreffende Seite relevant, daher würde ich es aus Gründen der Kapselung lieber auf der Seite speichern. –

+1

Das Speichern der Daten in der Sitzung würde es im Wesentlichen global machen. Wenn Sie es auf der Seite speichern, wird der Umfang reduziert, was die bessere Design-Praxis ist. –

Antwort

6

Nicht wirklich, ViewState ist tatsächlich in einem versteckten Feld gespeichert, so dass der einzige wirkliche Unterschied die Codierung ist.

Sofern Sie den Wert nicht mit JavaScript ändern müssen oder Sie ViewState auf dieser Seite insgesamt deaktivieren möchten, würde ich ViewState verwenden. Meistens nur, weil es Tools von Drittanbietern gibt (like this one), die ViewState verstehen und die Ihr benutzerdefiniertes verstecktes Feld nicht verstehen.

+1

Standardmäßig wird es in einem versteckten Feld gespeichert, Sie können dies jedoch ändern und [den ViewState in der Sitzung speichern] (http://msdn.microsoft.com/en-us/library/system.web.ui.sessionpagestatepersister%28v = vs.110% 29.aspx). –

0

Der ViewState wird in der Seite selbst gespeichert, so dass die Seitengröße erhöht wird und performance issues verursacht werden kann.

Auch können wir die Anwendung save the viewstate on server statt auf Seite selbst konfigurieren, die von einigen Sicherheitsproblemen schützen könnten.

Jomit

+0

Ich bin mir nicht sicher, ob das Argument für die Seitengröße hier gültig ist - die Seitengröße erhöht sich, unabhängig davon, ob ich meinen Wert in ViewState ablege oder der Seite ein zusätzliches Steuerelement hinzufüge und den Wert dort ablege –

+0

Ich stimme Richard E bezüglich der Seitengröße zu Streit; Auf der anderen Seite, stimme mit Jomit überein, dass Viewstate auf dem Server gespeichert werden kann. –

3

Aus Wartbarkeit Sicht würde ich Viewstate verwenden. Es ist weniger Code für Sie zum Schreiben, was auf weniger Fehlerquellen in Ihrer Software zurückzuführen ist. Es bedeutet auch, dass Entwickler, die nach Ihnen suchen, Ihre Lösung einfacher verwalten können.

Wenn Sie damit nicht ganz vertraut sind, eine Eigenschaftenaccessor auf der Seite schreiben, die als Fassade wirkt, um den Wert aus dem Viewstate abzurufen. Später, wenn Sie gezwungen sind, es in ein verstecktes Feld zu konvertieren, kann der Accessor diesen Schalter für den Rest des Codes nahtlos handhaben. Stellen Sie sicher, dass Sie Ihre Gründe dafür dokumentieren.

0

Viewstate ist nur gut auf der Seite, auf der Sie gerade sind oder auf die Sie schreiben. Mit einem versteckten Feld können Sie die Daten auf der nächsten Seite gelangen Sie (wie auch andere Daten) navigieren, indem Sie PreviousPage Methode des Page-Objekt wie folgt:

string term = ((TextBox)Page.PreviousPage.FindControl("txtSearchTerm")).Text; 
0

Das versteckte Feld auf Seite unsichtbar sind und ihre Werte können in der Ansichtsquelle angezeigt werden, aber der Wert des Ansichtszustands ist codiert und nicht lesbar.

Der Wert des versteckten Feldes wird auf der nächsten Seite angezeigt. (Hinweis: Verwenden Sie server.transfer um den Wert der versteckten Felder zu erhalten).