Vergangene Woche brauchte ich eine ASPX-Seite der zur Laufzeit ein User Control hinzugefügt wird. Welches Usercontrol das sein sollte, würde anhand einer Auswahl aus einer Combobox durch den Anwender entschieden. Zunächst probierte ich das entsprechende Usercontrol wie folgt zu generieren:
WebControl myControl = new myControl();
Schnell musste ich feststellen, dass aber dann die Objekte innerhalb meines Usercontrols nicht geladen wurden (z.B. die Labels und die Literals). Da ich das Usercontrol innerhalb eines ASPxCallbackPanels verwendet habe, trat immer eine reference null exception auf. Nach kurzer Recherche im Internet fand ich dann heraus, dass zum Laden von Usercontrols eine spezielle Funktion verwendet werden sollte: Page.LoadControl Method Allerdings stellte sich erst Erfolg ein, nachdem ich die erste Überladung verwendet habe. Bei meinem ersten Versuch hatte ich mich für die zweite Überladung mit (Type, Object[]) entschieden, diese funktionierte aber leider nicht. Daher habe ich die erste Überladung mit dem Parameter stringverwendet. Da ich das Usercontrol entsprechend einer Auswahl aus einer Combobox lade, sieht die Aufrufzeile wie folgt aus:
// this.FillLookupViewControl() ist eine Liste aller per Reflection // eingesammelten verfügbaren LookupViewControls var lookupViewControl = this.LoadControl(String.Format("~/controls/LookupView/{0}.ascx", this.FillLookupViewControl()[lookupViewName].Name));
Anschließend muss das geladene Usercontrol nur noch der Seite oder dem Platzhalter hinzugefügt werden:
this.PlaceHolderLookupView.Controls.Add(lookupViewControl);
Das war's! Nun wird zur Laufzeit das Usercontrol auf der Webseite dargestellt, dass der Anwender in der Auswahlbox aussucht.