2010-09-17 14 views
5

¿Hay alguna otra alternativa de ViewState? He escuchado mucho como Sesión, mantener el estado de algunos de los controles de la página y ser destruido en el momento en que el usuario abandona la página.Alternativas de ViewState en Webforms de ASP.NET

Sé que estoy describiendo ViewState en sí, pero estoy buscando un patrón de géneros o sugerencias para poder evitar ViewState por completo.

Un ejemplo de cómo lo estoy usando es donde estoy almacenando el contenido de mi grilla (Una lista de ViewModels) para ViewState. Esto ayuda a saber qué entradas están sucias, cuáles han sido modificadas, sus índices, los objetos seleccionados actualmente, etc.

Respuesta

3

Uno de mis colegas ha desarrollado una forma de almacenar datos de viewstate en un archivo. De modo que los datos pesados ​​de viewstate no se transmiten entre el cliente y el servidor. Solo una clave (que es el archivo de datos viewstate) que representa el archivo de datos viewstate se mantiene como una variable de sesión. En nuestras pruebas, hemos encontrado que al guardar viewstate en un archivo se reduce el tiempo de respuesta del servidor al disminuir la cantidad de viewstate (que era muy grande en ese momento).

En este article en "Mantener el estado de la vista en el servidor", puede averiguar cómo se puede implementar ese método. Incluso puede almacenar datos de viewstate en una tabla de base de datos, lo que brinda flexibilidad adicional si su aplicación se encuentra en una granja de servidores web.

+0

Aunque eso no parece una alternativa, puede aumentar el rendimiento de su aplicación sin cambiar toda la arquitectura. – Zafer

+0

Definitivamente voy a investigar esto. – Jonn

0

Tiene Session, y tiene Cache.

La sesión es por usuario, la memoria caché es global.

¿Realmente necesita almacenar todo esto en ViewState? ¿por qué puedes enviarlo (pero eres muy vago en tu pregunta, así que estoy haciendo algunas suposiciones aquí), obtener todos los datos antiguos de la base de datos, compararlos con tus datos nuevos y actualizar lo que ha cambiado?

+0

Me siento más cómodo que el estado resida en mis vistas como ViewModels. (Solo conservo solo las cosas que siento que son realmente necesarias para que el control funcione). Todo lo demás se vuelve a crear en la devolución de datos. ¿No va a obtener de la base de datos, recreando los ViewModels, y luego haciendo las comparaciones ser más lento en general? – Jonn

1

Otra opción es comprimir su ViewState. Todavía agrega volumen al viaje redondo, pero en general es mínimo.

Si está utilizando .Net 4, hay algunas nuevas adiciones útiles ViewState:

ASP.NET 4.0: more control on viewstate management

+0

Tsk. Todavía estamos desarrollando la mayoría de nuestras aplicaciones en .Net 3.5. – Jonn

1

No creo que usted está haciendo un caso de alejarse de ViewState.

Si tiene una gran cantidad de datos, se enfrentarán problemas al continuar en otro lugar. ¿Sesión? hará volar tu consumo de memoria, o si está fuera de proceso, moverás todo eso cada vez que cargues o escribas la sesión (una vez por solicitud). Por supuesto, puede intentar limitar el problema liberando los datos almacenados lo antes posible/como TempData en asp.net MVC.

Puede minimizar la cantidad de información que necesita almacenar para verificar los registros modificados mediante la introducción de una marca de tiempo/o una versión de registro. De esta forma, puede verificar si se ha agregado una nueva versión y mostrarle al usuario qué intentaron guardar y qué otra persona guardó.