Domanda

Ho la seguente funzione che aggiorna l'UpdatePanel contenuto con l'aggiunta di/caricamento di un ascx usercontrol personalizzato nel segnaposto che è in 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();            
                }

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>            

Sto chiamando NavigationTab_Click dal mio controllo di navigazione che è un'altra usanza ascx di controllo, il mio ctrl oggetto di Controllo che è il caricamento in modo dinamico e ognuno ha il pulsante e l'etichetta quando faccio clic sul pulsante semplicemente riassegna un po ' di testo per l'etichetta.

e ho il seguente codice sul mio masterpage solo per ottenere il controllo ascx percorso:

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

                base.OnInit(e);          
        } 

finora tutto funziona bene, dopo aver caricato il mio ctrl oggetto chiamando NavigationTab_Click funzione vedo il mio ctrl nel segnaposto e ha il bottone e l'etichetta, ma il problema è questo se faccio clic su questo pulsante dovrebbe riassegnare l'etichetta di testo, ma invece tutto il ctrl controllare il contenuto scompare, si prega di aiuto.

È stato utile?

Soluzione

Quando hai aggiunta di controlli dinamicamente è necessario assicurarsi che si ottiene ricreato ogni postback.È inoltre necessario assicurarsi che è possibile assegnare lo stesso ID di prima, altrimenti eventi non verrà attivato correttamente e valori non possono essere ricaricati dal ViewState.Questo deve essere fatto Page_Load(si meglio nel Page_Init).

Che è il motivo per cui si dovrebbe evitare di controlli dinamici ogni volta che è possibile.

Quindi, è possibile aggiungere controlli in caso di gestori come hai fatto.Ma devono essere ricreato al successivo Postback.Quindi, avete bisogno di memorizzare da qualche parte che(f.e.Id) o quanti controlli sono già stati creati.Che può essere fatto, ad esempio, in ViewState o Session.Quindi è possibile assegnare un'adeguata Id per i controlli(per esempio con l'indice o l'ID suffisso).

Qui ci sono alcune altre informazioni su questo argomento:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top