2009-10-22 20 views
9

Tengo una página en la que deseo mantener el valor del objeto entre las columnas posteriores. Pienso en dos maneras de mantener el valor de los objetosCuál es mejor usar ViewState u hiddenfield

  1. tienda el valor en Vista Estado
  2. tienda el valor en el campo oculto

cuál es la mejor opción para usar basado en el rendimiento

Respuesta

10

Viewstate si no es necesario hacer referencia a ella en el script del lado del cliente. Un campo oculto si lo haces.

Además, tenga en cuenta que si los datos son confidenciales, ViewState se cifra de manera predeterminada, mientras que el campo oculto, por defecto, lo almacena como texto plano visible para cualquier persona que sepa ver la fuente.

Editar

nota de Per @ Andrew Hare en su propia respuesta, estoy editando esto. Es una distinción lo suficientemente importante como para notarlo. Odiaría que alguien pensara que estaban "seguros" al usar Viewstate en función de mi supervisión.

El Viewstate NO está encriptado de manera predeterminada, se almacena como codificación Base-64. Se puede decodificar con bastante facilidad, por lo que el uso de Viewstate porque está encriptado de manera predeterminada no es válido. Es mejor que el texto sin formato, pero no para cualquier persona con la capacidad de googlear "descifrar Viewstate" o "decodificar Viewstate".

Así que no confíe en Viewstate para proteger su información oculta en el código del lado del cliente.

Un artículo here explica cómo encriptarlo correctamente. (pero también advierte sobre problemas de rendimiento).

0

Me gusta ViewState - es mucho más difícil de hackear - una persona desagradable podría enviar fácilmente su página con los datos incorrectos en su hola dden fields

0

Desea almacenarlo en el estado de visualización. Los campos ocultos se pueden actualizar en el navegador, ya que están destinados a almacenar información que se puede manipular en el lado del cliente. El estado de vista será validado por asp.net contra la manipulación, donde usted tendrá que hacer eso con el campo oculto usted mismo.

2

Realmente no importa ya que ViewState se almacena en una entrada oculta. Usa el que sea más fácil para ti. Si fuera por mí, elegiría ViewState ya que el tiempo de ejecución de ASP.NET manejará la serialización y deserialización de sus objetos por usted.

+0

No estoy seguro de que estoy de acuerdo ... Viewstate está encriptado donde un campo oculto, por defecto, no es A menos que me falta algo. Normalmente confío en tus respuestas, así que apuesto a que me estoy perdiendo algo. – David

+1

No, tiene un buen punto: ViewState se puede encriptar (pero no siempre); de manera predeterminada, es simplemente codificado en base 64). ¡Buena atrapada! :) –

+0

¡Gracias! Tienes razón sobre la base 64, por supuesto. Esa es una distinción importante. Estoy editando mi respuesta para reflejar esto. – David

Cuestiones relacionadas