Question

J'ai la fonction suivante que les mises à jour de l'UpdatePanel contenu en ajoutant/chargement d'un ascx personnalisé usercontrol dans l'espace réservé qui est en défaut.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>            

Je fais appel NavigationTab_Click de mon contrôle de la navigation qui est une autre coutume, ascx de contrôle, mon ctrl objet de Contrôle qui charge dynamiquement sur chaque a bouton et étiquette lorsque je clique sur le bouton, il simplement réassigne du texte de l'étiquette.

et j'ai le code suivant sur ma masterpage juste pour obtenir le ascx de contrôle chemin:

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

                base.OnInit(e);          
        } 

jusqu'à présent, tout fonctionne bien, après le chargement de mon ctrl objet en appelant NavigationTab_Click fonction je vois mon ctrl dans l'espace réservé et a le bouton et l'étiquette, mais la question est ce que si je clique sur ce bouton, il devrait réaffecter l'étiquette de texte mais plutôt l'ensemble de la ctrl contrôler le contenu disparaît, s'il vous plaît aider.

Était-ce utile?

La solution

Lorsque vous ajoutez des contrôles dynamiquement, vous devez vous assurer qu'il soit recréé sur chaque publication.Vous devez également vous assurer que vous attribuez le même ID que avant, sinon des événements ne sera pas effectuée correctement et que les valeurs ne peuvent pas être rechargés à partir de l'état d'affichage.Cela doit être fait Page_Load au plus tard(mieux dans Page_Init).

C'est la raison pour laquelle vous devriez éviter de dynamique des contrôles à chaque fois que possible.

Ainsi, vous pouvez ajouter des contrôles dans le cas des gestionnaires comme vous l'avez fait.Mais ils doivent être recréés sur la prochaine Publication.Si vous avez besoin de stocker quelque part ce que(f.e.IDs) ou combien de contrôles sont déjà créés.Qui peut être fait par exemple en ViewState ou Session.Ensuite, vous pouvez attribuer les identificateurs pour les contrôles(par exemple avec l'index ou l'ID suffixé).

Voici quelques informations supplémentaires sur ce sujet:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top