Pergunta

Eu tenho a seguinte função que atualiza o UpdatePanel conteúdo adicionando/carregamento de um ascx usercontrol personalizada no marcador de posição que está no padrão.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();            
                }

Masterpage UpdatePanel:

<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>            

Eu estou chamando NavigationTab_Click do meu controle de navegação que é outro costume ascx de controle, meu ctrl objecto de Controlo que está a ser carregado dinamicamente em cada um tem o botão de rótulo e quando eu clicar no botão, ele simplesmente atribui algum texto para o rótulo.

e eu tenho este código a seguir no meu masterpage apenas para obter o ascx caminho de controle:

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

                base.OnInit(e);          
        } 

até agora tudo funciona bem, depois de carregar a minha ctrl objeto chamando NavigationTab_Click função de eu ver o meu ctrl no espaço reservado e tem o botão e o rótulo, mas o problema é esse, se eu clicar neste botão, ele deve reatribuir o rótulo de texto, mas, em vez disso, todo o controle ctrl conteúdo desaparece, por favor, ajuda.

Foi útil?

Solução

Quando estiver a adicionar dinamicamente controlos você deve garantir que seja recriado em cada postback.Você também precisa garantir que você atribuir o mesmo ID como antes, caso contrário, os eventos não será acionado corretamente e valores não podem ser recarregadas a partir de ViewState.Isso deve ser feito Page_Load o mais tardar(melhor em Page_Init).

Essa é a razão pela qual você deve evitar dinâmicos controles sempre que possível.

Assim, você pode adicionar controles de manipuladores de eventos, como você fez.Mas eles devem ser recriados na próxima Postback.Então, você precisa armazenar em algum lugar que(f.e.IDs) ou como muitos controles já estão criados.Que pode ser feito, por exemplo, em ViewState ou Session.Em seguida, você pode atribuir IDs apropriadas para os controles(por exemplo, com o índice de IDENTIFICAÇÃO ou sufixo).

Aqui estão algumas informações adicionais sobre este assunto:

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top