子コントロールを手動でレンダリングするには、objChildControl.RenderControl または objControl.RenderChildren を使用する必要があります。しかし、これらの方法は不完全なようです。
すべての子コントロールは、OnPreRender イベントを使用して clientscript とクライアント スタイルシートを登録します (これらは prerender イベントでのみ作成できるため)。
現在の System.Web.UI.Page オブジェクトを子コントロールに渡し、これらの子コントロールで OnPreRender イベントが発生するようにするという 2 つの主な問題があります。
OnPreRender イベントが呼び出されないため、子コントロールで RenderControl メソッドを使用できないようです。ただし、objChildControl.Page = Me.Page で Page オブジェクトを渡すことができます。
RenderChildren を使用すると、Page オブジェクトを渡すことができません。また、RenderChildren を使用するときに OnPreRender イベントが呼び出されるかどうかもわかりません。
私は立ち往生しているので、いくつかの助けをいただければ幸いです;)
アップデート
必要な結果を得る方法を見つけましたが、それは私が望む解決策ではありません。例:
私が欲しいコード:
<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(ライター)
そして、上記の問題が始まります。Content 内のすべての子に対して OnPreRender が呼び出されるようにするにはどうすればよいですか?
動作するコード (ただし、RenderControl メソッドは役に立たない):
<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>
次に、wc:Content コントロールの RenderBeginTag と RenderEndTag を使用します。次に、OnPreRender イベントが呼び出されます。しかし、InnerProperty を使用して親コントロールにコンテンツを埋め込みたくありません。次に、RenderControl または RenderChildren によって子コントロールを手動でレンダリングします。