El contenido de control de usuario personalizado en UpdatePanel desaparece al hacer clic en el botón de devolución de datos

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

Pregunta

Tengo la siguiente función que actualiza el contenido de UpdatePanel agregando/cargando un control de usuario personalizado ascx en el marcador de posición que está en default.aspx:

 protected void NavigationTab_Click(string ascxpath)
                {           
                        Control ctrl = LoadControl(ascxpath);
                        //cphmaincontent is my asp ContenPlaceHoderId in masterpage
                        PlaceHolder phmaincontent = (PlaceHolder)cphmaincontent.FindControl("phmaincontent");
                        phmaincontent.Controls.Clear();
                        phmaincontent.Controls.Add(ctrl);
                        upmaincontent.Update();            
                }

Panel de actualización de la página maestra:

<asp:UpdatePanel ID="upmaincontent" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:Label ID="lbmsg" runat="server" Text=""></asp:Label>
                        <asp:ContentPlaceHolder ID="cphmaincontent" runat="server">                       
                        </asp:ContentPlaceHolder>                         
                    </ContentTemplate>
                </asp:UpdatePanel>            

Estoy llamando a NavigationTab_Click desde mi control de navegación, que es otro control ascx personalizado, mi objeto Ctrl Control que se carga dinámicamente en cada uno tiene un botón y una etiqueta, cuando hago clic en el botón, simplemente reasigna algo de texto a la etiqueta.

y tengo el siguiente código en mi página maestra solo para obtener la ruta de control ascx:

protected override void OnInit(EventArgs e)
        {           
               //raising an event to set ascx path
                mainmenu.NavigatePath += new usercontrols.mainmenu.NavigationHandler(NavigationTab_Click);

                base.OnInit(e);          
        } 

hasta ahora todo funciona bien, después de cargar mi objeto Ctrl llamando a la función NavigationTab_Click veo mi Ctrl en el marcador de posición y tiene el botón y la etiqueta, pero el problema es que si hago clic en este botón, debería reasignar la etiqueta a algún texto, pero en su lugar Todo el contenido del control Ctrl desaparece, por favor ayuda.

¿Fue útil?

Solución

Cuando agrega controles dinámicamente, debe asegurarse de que se vuelvan a crear en cada devolución de datos.También debe asegurarse de asignar la misma ID que antes; de lo contrario, los eventos no se activarán correctamente y los valores no se podrán recargar desde ViewState.Esto debe hacerse a más tardar en Page_Load (mejor en Page_Init).

Ésa es la razón por la que debes evitar los controles dinámicos siempre que sea posible.

Entonces puedes agregar controles en controladores de eventos como lo has hecho.Pero deben recrearse en la próxima devolución de datos.Entonces necesitas guardar en algún lugar lo que (p.e.ID) o cuántos controles ya están creados.Esto se puede hacer por ejemplo en ViewState o Session.Luego puede asignar ID apropiados a los controles (por ejemplo, con el índice o ID como sufijo).

Aquí hay alguna información adicional sobre este tema:

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