ASP.NET RenderControl 或 RenderChildren 失败

2024-04-16

我需要使用 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手动渲染子控件。


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

我最终覆盖了CreateChildControls函数在我的包含控制类中,我在其中添加了从解析的集合到Controls收藏。因为我要重写Render无论如何,我不担心 Controls 集合中的控件在我不希望它们被渲染时被渲染。

像下面这样:

[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) {
        ...
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET RenderControl 或 RenderChildren 失败 的相关文章

随机推荐