2009-07-09 4 views
4

Ich habe eine ASPX-Seite mit einem Platzhalter-Steuerelement deklariert.Platzhalter nicht instanziiert beim programmgesteuerten Hinzufügen von Steuerelementen

Im Codebehind erstelle ich ein UserControl das ich habe und füge es dem Platzhalter hinzu.

protected void Page_Load(object sender, EventArgs e) 
{ 
     UserControl uc = new ChartUserControl(); 
     myForm.Controls.Add(uc); 
} 

Die Usercontrol wiederum einen Platzhalter, aber in der Page_Load (für die Usercontrol), wenn ich tue:

protected void Page_Load(object sender, EventArgs e) 
{ 
    WebControl x = new WebControl(); 
    userControlPlaceholder.Controls.Add(x); 
} 

Es gibt mir den allgegenwärtigen „Objektverweis nicht auf eine Instanz eines gesetzt Objekt "Ausnahme.

Ich habe versucht, Instanziierung durch Aufruf eines Konstruktors zu erzwingen, aber das hat mich in andere Schwierigkeiten gebracht. Jede Hilfe wäre willkommen.

Antwort

8

Ich habe gerade 4 Stunden selbst damit verbracht.

Das Problem ist, dass Sie die Bedienelemente mit

ChartUserControl chart = new ChartUserControl(); 

sind zu schaffen, aber Sie haben Loadcontrol verwenden:

ChartUserControl chart = 
    (ChartUserControl)LoadControl("~/path/to/control/ChartUserControl.ascx"); 

Offenbar initialisiert Loadcontrol dem Benutzer die Kontrolle, so dass seine Platzhalter (und Ich würde annehmen, andere Steuerelemente, die es enthält), wird nicht null sein, wenn Sie sie verwenden.

+0

Danke danke Danke - das hat mich auch aus einem großen Stapel von Doo-Doo gebracht. –

+0

Ausgezeichnet! Ich dachte, ich müsste meinen gesamten Ansatz für dieses Projekt überdenken. –

+0

neben 'LoadControl()' gibt es noch andere Implementierungen um ein UserControl zu instanziieren? – bflemi3

2

Anstatt das Steuerelement in Page_Load hinzuzufügen, überschreiben Sie die CreateChildControls-Methode und fügen sie dort hinzu.

+0

Danke für den Tipp, macht sehr viel Sinn. Immer genau das gleiche Problem (ich habe es nach dem base.CreateChildControls();). – Chet

Verwandte Themen