我需要使用 objChildControl.RenderControl 或 objControl.RenderChildren 手动渲染我的子控件。但看起来这些方法并不完整。
我的所有子控件都使用 OnPreRender 事件来注册客户端脚本和客户端样式表(因为这些只能在预渲染事件中创建)。
我有两个主要问题,将当前的 System.Web.UI.Page 对象传递给子控件并确保在这些子控件上触发 OnPreRender 事件。
看来我无法在子控件上使用 RenderControl 方法,因为不会调用 OnPreRender 事件。
不过,我可以通过 objChildControl.Page = Me.Page 传递 Page 对象
当我使用 RenderChildren 时,我无法传递 Page 对象,或者可以吗?
我不确定当我使用 RenderChildren 时是否会调用 OnPreRender 事件。
一些帮助将不胜感激,因为我被困住了;)
Update
我找到了一种方法来获得我需要的结果,但这不是我想要的解决方案。
例子:
我想要的代码:
<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>
代码隐藏:objParentControl.Content.RenderControl(Writer)
然后上面提到的问题就会开始。如何确保对于 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手动渲染子控件。