Autor Beitrag
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 20.05.08 16:59 
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mi 21.05.08 11:18 
Im mycsharp-Forum hab ich jetzt eine Antworte dazu bekommen: www.mycsharp.de/wbb2...id=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.