Der Inhalt der benutzerdefinierten Benutzersteuerung in UpdatePanel verschwindet beim Postback mit einem Klick auf die Schaltfläche

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

Frage

Ich habe die folgende Funktion, die den UpdatePanel-Inhalt aktualisiert, indem sie ein benutzerdefiniertes ASCX-Benutzersteuerelement im Platzhalter in default.aspx hinzufügt/lädt:

 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>            

Ich rufe NavigationTab_Click von meinem Navigationssteuerelement aus auf, das ein weiteres benutzerdefiniertes ASCX-Steuerelement ist. Mein Strg-Steuerelementobjekt, das dynamisch auf jede Schaltfläche und Beschriftung geladen wird, weist beim Klicken auf die Schaltfläche einfach Text der Beschriftung neu zu.

und ich habe diesen folgenden Code auf meiner Masterseite, nur um den ASCX-Steuerungspfad zu erhalten:

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

                base.OnInit(e);          
        } 

Bisher funktioniert alles gut. Nachdem ich mein Strg-Objekt durch Aufrufen der NavigationTab_Click-Funktion geladen habe, sehe ich meine Strg-Taste im Platzhalter und habe die Schaltfläche und die Beschriftung, aber das Problem ist, dass wenn ich auf diese Schaltfläche klicke, die Beschriftung einem Text zugewiesen werden sollte, aber stattdessen der Der gesamte Inhalt der Strg-Steuerung verschwindet. Bitte helfen Sie.

War es hilfreich?

Lösung

Wenn Sie Steuerelemente dynamisch hinzufügen, müssen Sie sicherstellen, dass sie bei jedem Postback neu erstellt werden.Außerdem muss darauf geachtet werden, dass die gleiche ID wie zuvor vergeben wird, da sonst Ereignisse nicht korrekt ausgelöst werden und Werte nicht aus ViewState nachgeladen werden können.Dies muss spätestens beim Page_Load (besser in Page_Init) erfolgen.

Aus diesem Grund sollten Sie nach Möglichkeit auf dynamische Steuerungen verzichten.

Sie können also wie bisher Steuerelemente in Event-Handlern hinzufügen.Sie müssen jedoch beim nächsten Postback neu erstellt werden.Sie müssen also irgendwo speichern, was (z. B.IDs) oder wie viele Steuerelemente bereits erstellt wurden.Das kann zum Beispiel in erfolgen ViewState oder Session.Anschließend können Sie den Steuerelementen entsprechende IDs zuweisen (z. B. mit angehängtem Index oder ID).

Hier einige zusätzliche Informationen zu diesem Thema:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top