Thomas Bandt

Über mich | Kontakt | Archiv

UserControl und dessen Properties dynamisch laden

Ein UserControl ist schnell dynamisch geladen:

Control c = Page.LoadControl("~/MyUserControl.ascx");

Spannend wird es, wenn dieses UserControl bzw. dessen Basisklasse, von der es erbt, öffentliche Eigenschaften hat, die beim Laden zwingend gesetzt werden müssen, weil es sonst nicht funktioniert.

Die Lösung für diese Aufgabe (bzw. eine der Möglichkeiten) ist der Gang über Reflection:

PropertyInfo p = c.GetType().GetProperty("MyProperty");
if(p != null)
p.SetValue(c, "Irgendein Objekt", null);

Das kann man natürlich alles noch schön dynamisch machen, und beispielsweise über ein Dictionary laufen, welches als Key den Namen der Eigenschaft, und als Value das Objekt, was da "rein" soll, beinhaltet.

Update:

Ich hätte vielleicht dazu schreiben sollen, dass ich das veranstaltet habe, weil ich den Typ des UserControls in dem Moment, wo es geladen wird, nicht kenne, und damit ein simples Casting ausfällt.

Kommentare

  1. Stefan schrieb am Donnerstag, 25. Januar 2007 00:02:00 Uhr:

    Wieso um alles in der Welt löst du sowas über Reflection??? Ein simpler Cast auf das geladene Objekt hätte dir das Property auch eröffnet...
  2. Thomas schrieb am Donnerstag, 25. Januar 2007 00:18:00 Uhr:

    Weil ich den Typ des Objektes nicht kenne ...
  3. Stefan schrieb am Donnerstag, 25. Januar 2007 00:25:00 Uhr:

    Also gem. dem kennst du den Typ ja: Control c = Page.LoadControl("~/MyUserControl.ascx");
    Und wenn du den Typ nicht kennst, woher weisst du dann was für Properties dieses Objekt besitzt?
    ...
  4. Thomas schrieb am Donnerstag, 25. Januar 2007 00:30:00 Uhr:

    Hintergrund ist ein Control, in das dynamisch UserControls reingeladen werden. Diese UserControls kenne ich beim Befüllen des Controls ja, d.h. ich übergebe den Pfad sowie eine Liste von Properties und deren Values, die das zu ladende Control erwartet.

    Klarer? :-)


« Zurück  |  Weiter »