2009-10-22 9 views
9

Ich habe eine Seite, in der ich den Wert des Objekts zwischen Postbacks beibehalten möchte. den Wert von Objekten zu pflegenWelches ist am besten zu ViewState oder Hiddenfield

  1. Speichern Sie den Wert in View Sate
  2. Speichern Sie den Wert in verstecktes Feld ich zwei Möglichkeiten, denke

die beste Möglichkeit ist, zu verwenden, basierend auf der Leistung

Antwort

10

Viewstate, wenn Sie nicht brauchen es in Client-seitiges Script zu verweisen. Ein verstecktes Feld, wenn Sie es tun.

Bedenken Sie auch, dass das Viewstate standardmäßig verschlüsselt ist, wenn die Daten sensitiv sind, während das verborgene Feld es standardmäßig als einfachen Text speichert, der für jeden sichtbar ist, der weiß, wie er die Quelle anzeigen kann.

bearbeiten

Per @ Andrew Hares Hinweis auf seine eigene Antwort, ich bearbeite ich diese. Es ist eine wichtige genug Unterscheidung zu beachten. Ich würde es hassen, dass jemand denkt, dass sie "sicher" sind, indem sie das Viewstate basierend auf meiner Aufsicht benutzen.

Das Viewstate ist NICHT standardmäßig verschlüsselt, es wird als Base-64-Codierung gespeichert. Es kann relativ leicht entschlüsselt werden, so dass Viewstate verwendet wird, weil es standardmäßig verschlüsselt ist. Es ist besser als Nur-Text, aber nicht für jemanden mit der Fähigkeit, "Viewstate entschlüsseln" oder "Viewstate dekodieren" zu googeln.

Verlassen Sie sich also nicht auf Viewstate, um Ihre versteckten Informationen im clientseitigen Code zu schützen.

Ein Artikel here erzählt, wie man es richtig verschlüsselt. (warnt aber auch vor Leistungsproblemen).

0

Ich mag ViewState - es ist viel schwieriger zu hacken - eine fiese Person könnte leicht Ihre Seite mit schlechten Daten in Ihrem Hallo schicken dden-Felder

0

Sie möchten es im Ansichtszustand speichern. Versteckte Felder können im Browser aktualisiert werden, da sie Informationen speichern sollen, die auf der Client-Seite manipuliert werden können. Der Ansichtszustand wird von asp.net gegen Manipulationen validiert, wobei Sie dies mit dem versteckten Feld selbst tun müssen.

2

Es spielt keine Rolle, da ViewState selbst in einer versteckten Eingabe gespeichert ist. Verwenden Sie das, was Ihnen leichter fällt. Wenn es nach mir ginge, würde ich ViewState wählen, da die ASP.NET-Laufzeit die Serialisierung und Deserialisierung Ihrer Objekte für Sie übernimmt.

+0

Ich bin mir nicht sicher, ich stimme zu ... Viewstate ist verschlüsselt, wo ein verstecktes Feld, ist standardmäßig nicht Es sei denn, ich vermisse etwas. Normalerweise vertraue ich deinen Antworten, also wette ich, dass mir etwas fehlt. – David

+1

Nein, Sie machen einen guten Punkt - ViewState kann verschlüsselt werden (aber es ist nicht immer - standardmäßig ist es einfach Base-64-codiert). Schöner Fang! :) –

+0

Danke! Sie haben natürlich Recht mit der Base-64. Das ist ein wichtiger Unterschied. Ich bearbeite meine Antwort, um das zu reflektieren. – David

Verwandte Themen