Las propiedades de Asp.net BasePage que usan ViewState se borran en la devolución de datos

StackOverflow https://stackoverflow.com/questions/627049

Pregunta

Aquí están los conceptos básicos de mi configuración:

Tengo una clase BasePage que hereda de System.Web.UI.Page. BasePage tiene dos propiedades implementadas de manera tal que su get / set lo hace desde dos elementos diferentes en la colección ViewState (por ejemplo, ViewState [" Year "] de BasePage).

Tengo otra clase que luego hereda de BasePage, llamémosla SpecificBasePage.

Finalmente, tengo una página aspx que hereda SpecificBasePage.

Agregué puntos de interrupción e hice muchos pasos en mi código y descubrí que en la carga de la página inicial, ambas propiedades del estado de vista son valores asignados y los valores persisten durante el primer ciclo de vida de carga de la página.

Sin embargo, cuando la página se vuelve a publicar, durante el evento Page_Load y otros controladores de eventos (cuando se debe cargar ViewState), ambas propiedades devuelven un valor nulo. Al inspeccionar esto, ViewState.Count muestra que hay cero objetos en la colección.

¿Alguien puede pensar en algo que podría estar haciendo en algún lugar que afectaría a ViewState y causaría este comportamiento?

--Adición Lo he aislado a una parte de mi código. En la carga inicial, doy los valores de las propiedades de viewstate en OnInit, descubrí que cuando muevo esto a OnLoad, los valores persisten en la publicación posterior. Supongo que a pesar de que los valores de estado de vista agregados persisten durante el ciclo de vida de la página inicial, ¿se abandonan en la publicación posterior?

¿Fue útil?

Solución

Las páginas pueden tener EnableViewState = false en aspx

También podría estar deshabilitado en la configuración web.config de la aplicación, o incluso en la computadora en general en el elemento.

Actualización 1: En el ciclo de vida de asp.net, ViewState se carga después de Init y antes de Load más información . Véalo como si algo en init se considera parte de la declaración de la página. Más tarde asp.net cargará el estado de vista, y después de eso comienza a rastrear los cambios en el estado de vista. Es después de esto que asp.net verá cualquier diferencia entre la información inicial en viewstate y la información modificada, por lo que moverla a cargar evita el problema (ya que el estado inicial no está allí, y el estado nuevo es lo que haya puesto en el viewstate) . Desde el enlace de arriba:

  

" La razón es porque la clase StateBag   solo rastrea los cambios a sus miembros   después de que su método TrackViewState () tenga   ha sido invocado Es decir, si tienes un   StateBag, cualquiera y todas las adiciones o   modificaciones que se realizan antes   TrackViewState () está hecho no será   guardado cuando el método SaveViewState ()   es invocado El TrackViewState ()   El método se llama al final de la   etapa de inicialización, que sucede   después de la etapa de instanciación.   Por lo tanto, la propiedad inicial   asignaciones en la instanciación   etapa: mientras se escribe en ViewState   en el conjunto de propiedades de los accesores   no persistió durante el   Llamada al método SaveViewState () en el   guardar la etapa de estado de vista, porque el   El método TrackViewState () todavía tiene que ser   invocado. "

Otros consejos

Aquí hay una excelente respuesta que otro usuario publicó sobre Ciclo de vida de la página ASP.NET vale la pena ver los problemas de ViewState.

Además, eche un vistazo a " Verdaderamente ViewState "

Como dije en la parte que agregué más tarde, aparentemente no puede establecer nada en el estado de vista antes de cargar la página, AUNQUE ASP.net no arroja un error y existirá en el estado de vista durante todo el inicio ciclo de vida de la página, NO persistirá en el ciclo de vida posterior de la publicación posterior.

Observe dónde está configurando los valores de ViewState. Posiblemente cablee su evento OnUnload e inspeccione el objeto ViewState solo para asegurarse de que los valores se estén configurando realmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top