update net asp c# asp.net user-controls

c# - net - La variable Viewstate perdida en el control del usuario se carga dinĂ¡micamente



update mysql asp net c# (4)

¿Cuándo está cargando el control del usuario? Esto tiene que suceder en el evento Init si desea que ViewState se guarde / restaure.

Tengo un problema con ViewState. Tengo una página aspx que tiene una vista de árbol a la izquierda y un Panel de actualización con un panel ASP.NET adentro a la derecha. Es en ese Panel interno donde cargo y descargo dinámicamente los controles de usuario. Yo uso ese panel de actualización para cargar controles dinámicamente.

También hice un control personalizado para mis controles de usuario porque necesito pasar algunos valores de la página. En ese constructor utilizo ViewState para almacenar estos valores.

La primera vez que cargo el control del usuario, llamo a su constructor con parámetros. Cuando vuelvo a cargar ese control de usuario en cada devolución, utilizo su constructor normal.

Mi problema es que los valores que he almacenado en ViewState se han vuelto nulos en la devolución de datos sucesiva.

Actualizar:

Esta es una parte de mi control de usuario:

public class MyUserControl : System.Web.UI.UserControl { private int PKId { get { return ViewState["pkId"] as int; } set { ViewState["pkId"] = value; } } public MyUserControl(int pkId) { this.PKId = pkId; } ... }

Estoy siguiendo este artículo para cargar controles dinámicamente: http://msdn.microsoft.com/en-us/magazine/cc748662.aspx#id0070065 .

Segunda actualización:
También configuré el mismo ID de control cuando cargo el control del usuario por primera vez y en cada elemento de la red.

Tal vez pueda usar otro método para almacenar estos valores, como ingresar campos ocultos o Caché. Elegí ViewState porque no quiero sobrecargar el servidor con valores de sesión para cada usuario.

Tercera actualización:

I load the controls with this code: System.Web.UI.UserControl baseControl = LoadControl(ucUrl) as System.Web.UI.UserControl; if (baseControl != null) { baseControl.ID = "DestinationUserControl"; PanelDestination.Controls.Add(baseControl); }

Y reaload con este código:

DynamicControls.CreateDestination ud = this.LoadControl(TrackedUserControl) as DynamicControls.CreateDestination; if (ud != null) { ud.ID = "DestinationUserControl"; PanelDestination.Controls.Add(ud); }

¿Qué esta pasando?


Agregar controles dinámicamente dentro de un UpdatePanel es una mala idea. Genera muchos problemas.

Si es posible, quite la creación del control dinámico del UpdatePanel y creo que su problema se resolverá.



Como mencionó Bryan , debería cargar sus controles dinámicos en Page_Init en lugar de Page_Load.

Como se explica en esta descripción del ciclo de vida de la página , cuando se produce el evento Page_Load, el estado de la vista de la devolución de datos ya se ha procesado (en PreLoad). Si los controles aún no se han cargado nuevamente, el estado de vista no tiene dónde ir.

Precarga:

Use este evento si necesita realizar el procesamiento en su página o control antes del evento Load.

Antes de que la instancia de página presente este evento, carga el estado de la vista para sí mismo y para todos los controles , y luego procesa los datos de devolución incluidos con la instancia de solicitud.