He estado escribiendo una serie de controles genéricos de ASP.NET, y una cosa que no logro entender es cuándo almacenar valores en viewstate, y cuándo asumir que está bien no hacerlo.¿Cómo decido qué almacenar en viewstate?
Por un lado, tiene sentido para almacenar todo el estado del control en el estado de vista, incluyendo propiedades como:
- valores del cuadro de texto introducido por el usuario (o cualquier dato de forma)
- opciones de configuración como la altura o el tamaño de página
- Incluso cómo se ha compuesto el control, por ejemplo, almacenar todos los datos desde los que está construida una vista de cuadrícula, o la cuadrícula misma.
rendimiento Haciendo caso omiso, cuanto más se puede meter en el estado de vista el mejor, ya que los medios de control se comportará exactamente las mismas a través de las devoluciones de datos y nunca "accidentalmente" revertir un valor o "olvidar" que se ha desactivado. Pero viewstate no es gratis. Almacenar todo significa que el control ahora generará tanto el HTML como todas sus propiedades internas para crear ese HTML, que casi siempre duplicaría el resultado.
Mi pregunta no es sobre el rendimiento, sino sobre la estrategia. ¿En qué criterios decido poner una propiedad en viewstate? que estaba pensando algo como lo siguiente:
Si el usuario no puede cambiar una propiedad, entonces el servidor se ponga siempre de forma explícita, así que está bien para dejarlo fuera del estado de vista. Incluso para algo como
color=red
, el usuario no establece esta propiedad directamente; harán clic en un botón en otro lugar que establece indirectamente esta propiedad. Ese botón o su propietario debe mantener el estado, no el control que vuelve rojo el color.
Esta lógica implica que las únicas propiedades que debe entrar en estado de vista serían:
- Los elementos de formulario como
<input>
(y conRequest.Form[c.UniqueID]
esto se puede evitar todavía) - propiedades que el usuario puede controlar interactivamente directamente en el control.
¿Tiene sentido esta lógica? Parece débil y me gustaría escuchar más de los expertos.
También: http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx es una lectura divertida – Patrick