Entwickler-Ecke

ASP.NET und Web - Wrap-Eigenschaft im UserControl


UGrohne - Di 20.05.08 16:59
Titel: Wrap-Eigenschaft im UserControl
Hallo,

ich arbeite gerade an einem Framework zu einem CMS. Dazu habe ich eine abstrakte Klasse BaseControl, die von WebControl erbt. Von dieser erben einige Control-Klassen, die verschiedene Dinge tun (z.B. Text darstellen, Bilder formatieren usw.). Ein ContentManager, der auf der ASPX-Seite ist, erstellt diese Klassen dann dynamisch.

Die Ausgabe der einzelnen Controls erfolgt, indem die Render-Prozedur überschrieben wird und das HTML ausgegeben wird. Jeztt möchte ich erreichen, dass ein ContentManager bestimmt, dass jedes Element in einem bestimmtes HTML-Tag eingeschlossen werden soll, dazu hab ich dem ContentManager eine Eigenschaft ElementWrap gegeben, die z.B. so aussieht: <div class="element">|</div>. Das | soll dann durch die eigentliche Ausgabe ersetzt werden.

Jetzt macht es natürlich Sinn, dass das Ganze in BaseControl geschieht, nur ist das Dumme: Ich find keine passenden Ereignisse. es gibt zwar RenderBeginTag und RenderEndTag, aber diese werden beide vor der eigentliche Render-Prozedur aufgerufen, sodass das komplette Wrap VOR dem Content-Output des eigentlichen Content-Elements kommt und das ist ja nicht der Sinn der Sache.

Hat mir hier jmd eine Idee, wie man das machen könnte, ohne alles komplett umbauen zu müssen?


UGrohne - Mi 21.05.08 11:18

Im mycsharp-Forum hab ich jetzt eine Antworte dazu bekommen: http://www.mycsharp.de/wbb2/thread.php?postid=301445#post301445

Die hat mich auf den richtigen Weg gebracht. Ich muss nur die ChildControls kurz anpassen und statt der Render- die RenderContents-Methode überschreiben. In BaseControl überschreibe ich dann Render und rufe nacheinander RenderBeginTag, RenderContents und dann RenderEndTag auf und schon funktionierts und zwar sowohl wenn ich direkt HTML-Code ausgebe, als auch wenn ich ChildControls in meinen Content-Elementen lade.