Wie kann ich Steuerelemente in eine dynamisch hinzugefügte Usercontrol in Seite verschieben?

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

Frage

Ich habe ein UserControl, das sich dynamisch auf der Methode createChildControls ein paar Web -Steuerelemente bewegt. Wenn Sie dieses Steuerelement in einer Seite wie folgt verwenden:

<myControls:MyUserControl runat="server" ID="myUserControl" />

Es funktioniert einwandfrei.

Aber wenn ich diesen UserControl dynamisch in eine Seite wie folgt hinzufügen möchte:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:PlaceHolder runat="server" ID="plhControls" />
    </ContentTemplate>
</asp:UpdatePanel>
<asp:Button runat="server" ID="btnAdd" OnClick="btnAdd_Click" />

.cs

protected void btnAdd_Click(object sender, EventArgs e)
{
    MyUserControl myUserControl =(MyUserControl)LoadControl("~/Controls/MyUserControl.ascx");
    myUserControl.ID = "test";
    plhControls.Controls.Add(myUserControl );
}

Es stürzt in meinen CreateChildControls mit Fehler ab: Die Steuersammlung kann nicht während der Datenbank, init, laden, vorgezogen oder entladen werden.

Die genaue Zeile ist, wenn ich die Webcontrols dem Platzhalter in meiner UserControl hinzufüge:

plhContent.Controls.Add(myWebControl);

Ich verstehe also nicht, warum ich in diesem Fall eine Websteuerung innerhalb des CreateChildControls -Ereignisses nicht verschieben kann, wenn ich meine UserControl dynamisch hinzufüge.

War es hilfreich?

Lösung

Da LoadControl jedes Ereignis der geladenen Steuerung für das aktuelle Ereignis einholt, ist es unmöglich, die CreateChildControls gleichzeitig wie das übergeordnete Ausführen auszuführen, da das Ereignis bereits zu diesem Zeitpunkt stattgefunden hat.

In meinem Fall kann ich meine Usercontrol nicht dynamisch hinzufügen, also habe ich das Gegenteil getan, um das gleiche Verhalten zu reproduzieren, das ich wollte. Ich initialisiere alle meine Steuerelemente und entferne diejenigen, die ich nicht auf der Klick möchte. Dies fügt nicht benötigte Ladezeit hinzu, ist aber in dem Szenario, in dem ich es benutze, akzeptabel.

Andere Tipps

Die Bedienelemente müssen mit den übrigen Steuerelementen initialisiert und auf dem neuesten Stand des "Seitenlebenszyklus" auf dem neuesten Stand gebracht werden. Schauen Sie sich die Seite der Seite an.

Die Methode, die wir manchmal verwenden, beinhaltet die Verwendung eines Postback -Parameters von der Seite. Vergessen Sie nicht, dass Sie Ihre Kontrolle auf das Formular für jeden Postback neu anpassen müssen, da sie nicht für Sie erstellt werden

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