首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET RenderControl或RenderChildren失败

ASP.NET RenderControl或RenderChildren失败
EN

Stack Overflow用户
提问于 2009-11-20 10:18:57
回答 1查看 2.8K关注 0票数 3

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

我的所有子控件都使用OnPreRender事件注册客户端脚本和客户端样式表(因为它们只能在预制板事件中创建)。

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

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

当我使用RenderChildren时,我不能传递Page对象,或者可以吗?我也不确定当我使用OnPreRender时是否调用了RenderChildren事件。

因为我被困住了,所以我们会感谢你的帮助;)

更新

我找到了获得我所需要的结果的方法,但这不是我想要的解决方案。示例:

我想要的代码:

代码语言:javascript
复制
<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):CodeBehind

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

可以工作的代码(但是RenderControl方法就是无用的):

代码语言:javascript
复制
<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手动呈现子控件。

EN

回答 1

Stack Overflow用户

发布于 2009-11-26 01:18:05

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

最后,我在包含控件类中重写了CreateChildControls函数,在该类中,我将从解析的集合添加到Controls集合的所有内容。因为我无论如何都要重写Render函数,所以我并不担心控件集合中的控件在我不希望它们呈现的时候呈现出来。

如下所示:

代码语言:javascript
复制
[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) {
        ...
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1769557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档