Ich muss objChildControl.RenderControl oder objControl.RenderChildren verwenden, um meine untergeordneten Steuerelemente manuell zu rendern. Aber es sieht aus wie diese Methoden sind unvollständig.
Alle meine untergeordneten Steuerelemente verwenden das OnPreRender-Ereignis, um Clientscript und Client-Stylesheets zu registrieren (da diese nur im Prerender-Ereignis erstellt werden können).
Ich habe 2 Hauptprobleme, die Übergabe des aktuellen System.Web.UI.Page-Objekts an ein untergeordnetes Steuerelement und sicherstellen, dass das OnPreRender-Ereignis auf diese untergeordneten Steuerelemente ausgelöst wird.
Es scheint, dass ich die RenderControl-Methode nicht für meine untergeordneten Steuerelemente verwenden kann, da das OnPreRender-Ereignis nicht aufgerufen wird. Ich kann jedoch das Seitenobjekt mit objChildControl.Page = Me.Page übergeben
Wenn ich RenderChildren verwende, kann ich das Page-Objekt nicht übergeben, oder doch? Und ich bin nicht sicher, ob das OnPreRender-Ereignis überhaupt aufgerufen wird, wenn ich RenderChildren verwende.
Etwas Hilfe wäre sehr willkommen, da ich nicht weiterkomme ;)
Update
Ich habe einen Weg gefunden, das gewünschte Ergebnis zu erzielen, aber es ist nicht die Lösung, die ich mir wünsche. Beispiel:
Ich will den Code:
<wc:ParentControl id="objParent" runat="server" bla="etc">
<Content> <!-- This is an InnerProperty of the ParentControl --><DIV>bla bla bla bla.....<wc:SomeControl id="objSomeControl" runat="server" /><wc:3rdPartyControl id="obj3rdPartyControl" runat="server" /></DIV></Content>
</wc:ParentControl>
CodeBehind: objParentControl.Content.RenderControl(Writer)
Und dann beginnen die oben genannten Probleme. Wie kann man sicherstellen, dass für alle untergeordneten Elemente innerhalb von Content der OnPreRender aufgerufen wird?
Code, der funktioniert (aber dann ist die RenderControl-Methode einfach nutzlos):
<wc:ParentControl id="objParentControl" runat="server"></wc:ParentControl>
<wc:Content id="objContent" runat="server"><DIV>bla bla bla bla.....<wc:SomeControl id="objSomeControl" runat="server" /><wc:3rdPartyControl id="obj3rdPartyControl" runat="server" /></DIV></wc:Content>
Dann verwenden Sie einfach den RenderBeginTag und den RenderEndTag des wc:Content Controls. Dann wird das OnPreRender Ereignis aufgerufen. Aber ich möchte den Inhalt in das Parentcontrol einbetten, indem ich eine InnerProperty verwende. Und dann manuell die Childcontrols mit RenderControl oder RenderChildren rendern.