我需要使用 objChildControl.RenderControl 或 objControl.RenderChildren 来手动渲染我的子控件。但看起来这些方法是不完整的。
我所有的子控件都使用 OnPreRender 事件来注册客户端脚本和客户端样式表(因为这些只能在 prerender 事件中创建)。
我有 2 个主要问题,将当前 System.Web.UI.Page 对象传递给子控件并确保在这些子控件上触发 OnPreRender 事件。
似乎我不能在我的子控件上使用 RenderControl 方法,因为不会调用 OnPreRender 事件。但是,我可以通过 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>
代码隐藏: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 手动渲染子控件。