ASP.NET RenderControl或RenderChildren失败

ASP.NET RenderControl或RenderChildren失败,asp.net,rendercontrol,Asp.net,Rendercontrol,我需要使用objChildControl.RenderControl或objControl.RenderChildren手动呈现我的子控件。但看起来这些方法是不完整的 所有my child控件都使用OnPreRender事件来注册clientscript和客户端样式表(因为它们只能在prerender事件中创建) 我有两个主要问题,将当前System.Web.UI.Page对象传递给子控件,并确保在这些子控件上触发OnPreRender事件 似乎我不能在我的子控件上使用RenderControl

我需要使用objChildControl.RenderControl或objControl.RenderChildren手动呈现我的子控件。但看起来这些方法是不完整的

所有my child控件都使用OnPreRender事件来注册clientscript和客户端样式表(因为它们只能在prerender事件中创建)

我有两个主要问题,将当前System.Web.UI.Page对象传递给子控件,并确保在这些子控件上触发OnPreRender事件

似乎我不能在我的子控件上使用RenderControl方法,因为OnPreRender事件将不会被调用。 但是,我可以通过objChildControl.Page=Me.Page传递页面对象

当我使用RenderChildren时,我无法传递页面对象,或者我可以吗? 我不确定在使用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)

然后,上面提到的问题就开始了。如何确保对内容中的所有子级调用OnPreRender

确实有效的代码(但是RenderControl方法是无用的):


呜呜呜呜呜呜。。。。。
然后只需使用wc:Content控件的RenderBeginTag和renderndtag。 然后调用OnPreRender事件。 但我不想通过使用InnerProperty将内容嵌入parentcontrol。
然后通过RenderControl或RenderChildren手动呈现子控件。

我也遇到了类似的问题。我不确定这是否与您遇到的问题相同,但我遇到的问题是,我的容器控件上有一个
ParseChildren(true)
属性。因为ParseChildren为true,所以子控件将被放入属性中,而不是包含控件的子控件集合中,并且永远不会调用它们的
OnPreRender
函数

我最终覆盖了包含控件类中的
CreateChildControls
函数,在该类中,我添加了从已解析的集合到
Controls
集合的所有内容。因为我正在重写
Render
函数,所以我不担心控件集合中的控件在我不希望它们被渲染时被渲染

如下所示:

[ParseChildren(true, "MyKids")]
public class Example : Control {

    private ArrayList _kids = new ArrayList();

    public ArrayList MyKids {
        get { return _kids; }
        set { _kids = value; }
    }

    protected override CreateChildControls() {
        Controls.Clear();
        foreach(Control c in _kids)
            Controls.Add(c);
    }

    protected override Render(HtmlTextWriter writer) {
        ...
    }
}
[ParseChildren(true, "MyKids")]
public class Example : Control {

    private ArrayList _kids = new ArrayList();

    public ArrayList MyKids {
        get { return _kids; }
        set { _kids = value; }
    }

    protected override CreateChildControls() {
        Controls.Clear();
        foreach(Control c in _kids)
            Controls.Add(c);
    }

    protected override Render(HtmlTextWriter writer) {
        ...
    }
}