2010-06-09 11 views
5

He buscado en la web la respuesta y vi que la mayoría de las variables se guardan en viewstate en el evento page.prerender. Luego, el valor de la variable se restablece en el evento de carga de página.Cuándo guardar una variable en viewstate?

Sin embargo, cuando guardo una variable en viewstate en prerender o cargo eventos, ¿cómo puede viewstate almacenar el valor de la variable después de que se modifique dinámicamente en codebehind?

Digamos, después de cargar la página, el usuario hizo clic en un botón que cambia el valor de la variable en su evento onClick. Luego, el evento de devolución de datos se levantó desde que se hizo clic en el botón. Según mi opinión, el nuevo valor debería haberse perdido y no se puede guardar en viewstate si la variable se guarda en viewstate solo en el evento prerender. Porque en el postback, el evento prerender no se activará y el valor no se podrá guardar.

¿No debería guardar la variable en el estado de vista justo antes de que el evento de devolución de datos se eleve?

¿Estoy equivocado? Si es así, ¿cómo puede viewstate almacenar el nuevo valor de la variable si viewstate se guarda en el evento prerender?

Gracias por la respuesta de antemano ..

+1

Tener un vistazo a [página ASP.NET ciclo de vida @ MSDN] (http://msdn.microsoft.com/en-us/library/ms178472.aspx) –

Respuesta

5

Sospecho que está confundiendo el ahorro de ViewState, es decir. serializar la colección ViewState en la memoria a una representación de cadena o a un objeto intermedio que se puede serializar fácilmente, con la modificación real de ese objeto en memoria ViewState con sus métodos de acceso regulares.

Lo que puede estar oyendo es que se llama al método SaveViewState() después del evento PreRender. Pero eso tiene poco que ver con cuando se modifica el contenido de la colección ViewState.

Puntos de compra 7. Predeterminación de los objetos y 8.ViewState Saved en el artículo The ASP.NET Page Life Cycle. Hay un buen artículo de MSDN que también trata sobre esto.

alt text http://i.msdn.microsoft.com/dynimg/IC152667.gif

+1

Muy buen artículo kervin, gracias. Por lo tanto, parece que también puedo anular el evento SaveViewState y guardar mi variable durante ese evento en lugar de guardar mi variable en el evento prerender. Es bueno saber que incluso si no lo voy a usar ahora ... –

-2

Viewstate se mantiene a través de un campo oculto, así devolución de datos tiene que terminar antes de que sea "set". Si lo configura e intenta leerlo en el mismo ciclo de la página, no funcionará. Puede intentar usar el objeto Session, que obtiene/establece valores en la memoria.

+0

Viewstate se puede leer en una página ciclo. Posiblemente sea un problema con el ciclo de vida de la página y el evento. p.ej. el valor se lee antes de que se ejecute el controlador de clic del botón. –

0

Según ASP.Net Page Lifecycle Overview (énfasis es mío)

precarga()

Raised después de la página cargas de estado de vista por sí mismo y todos los controles, y después de que procesa los datos postback que se incluye con la instancia de Request().

....

SaveStateComplete()

aumentarse al cabo de estado de vista y el control estatal se han salvado de la página y para todos los controles. Cualquier cambio en la página o controles en este momento afecta el procesamiento, pero los cambios no se recuperarán en la siguiente devolución.

Como ambos eventos de control y el evento PreRender ocurren entre estos dos, sus datos deben persistir en ViewState.

+0

Gracias Paul. Después de leer el ciclo de vida de la página, me di cuenta de mi error. De alguna manera pensé que Page_PreRender se dispara antes que Page_Load. Ahora sé lo que está sucediendo en el fondo: 1) Cuando el usuario hace clic en un botón, la primera página se vuelve a publicar y el evento Page_Load se dispara. 2) A continuación, se asigna el nuevo valor a la variable 3) Por último, el evento Page_PreRender activa y guarda la variable en viewstate. –

Cuestiones relacionadas