servidor net lado controles asp asp.net user-controls viewstate loadviewstate

asp.net - net - LoadViewState no se activó en mi control de usuario



controles html en asp net (2)

Tengo un control de usuario anidado en un repetidor. Dentro de mi control de usuario tengo otro repetidor y en eso tengo un panel.

Estoy intentando anular el evento LoadViewState de mi control de usuario y agregar dinámicamente controles al panel. Quiero hacerlo en LoadViewState para que los controles dinámicos se agreguen antes de que viewstate se cargue, por lo que conservan sus valores después de las publicaciones posteriores.

Por algún motivo, el evento LoadViewState en el control de usuario (ascx) no se activa. ¿Hay alguna forma de obligarlo a disparar, o hay otro método que pueda usar? He descartado el evento databind de repetidor de controles de usuario, porque necesito que funcione incluso si el enlace de datos no está sucediendo y no puedo hacerlo en el evento creado por el elemento repetidor porque el panel secundario y el html interno no existen. todavía.


Creo que tuve un problema similar con algunos controles de usuario para niños creados dinámicamente. LoadViewState no se llamó en las devoluciones de datos, incluso si pude acceder a su ViewState al crearlos primero. SaveViewState también se llamaba correctamente. Se finalizó que los niños ViewState no eran realmente utilizables (sin que esto resultara en una excepción) en el evento Init la página antes de que se inicializaran por completo, y esto solo ocurría cuando los controles se agregaban al padre. Después de haberse asegurado de esto, ViewState de los niños se mantuvo correctamente en las devoluciones.

// Belongs to a Page. If you create the children control in the // Load event in you can also access the page ViewState protected void Page_Init(object sender, EventArgs e) { if (!IsPostBack) { for (int it = 0; it < 5; it++) { ChildControl child = LoadControl("ChildControl.ascx") as ChildControl; child.ParentPage = this; TabPanel tab = tabContainer.FindControl("TabPanel" + it) as TabPanel; // Ensure to add the child control to its parent before // accessing its ViewState! tab.Controls.Add(child); // <--- string caption = "Ciao" + it; child.Caption = caption; // Here we access the ViewState tab.HeaderText = caption; tab.Visible = true; _Children.Add(child); } } [...] } // Belongs to ChildControl public string Caption { get { return ViewState["Caption"] as string; } internal set { this.ViewState["Caption"] = value; } }


LoadViewState no es el lugar apropiado para agregar controles secundarios. Para agregar controles dinámicamente dentro de un control de usuario, querrá ver el método CreateChildControls .

No está LoadViewState un evento LoadViewState porque debe guardar al menos un valor en ViewState para que el evento se active.