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).
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
No, tiene un buen punto: ViewState se puede encriptar (pero no siempre); de manera predeterminada, es simplemente codificado en base 64). ¡Buena atrapada! :) –
¡Gracias! Tienes razón sobre la base 64, por supuesto. Esa es una distinción importante. Estoy editando mi respuesta para reflejar esto. – David