gpt4 book ai didi

ASP.NET RenderControl 或 RenderChildren 失败

转载 作者:行者123 更新时间:2023-12-02 02:35:57 27 4
gpt4 key购买 nike

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

我所有的子控件都使用 OnPreRender 事件来注册客户端脚本和客户端样式表(因为这些只能在预渲染事件中创建)。

我有 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 手动渲染子控件。

最佳答案

我遇到了类似的问题。我不确定这是否与您遇到的问题相同,但我遇到的问题是我的容器控件上有一个 ParseChildren(true) 属性。因为 ParseChildren 为真,子控件将被放入一个属性中,而不是放入包含控件的子控件集合中,并且永远不会调用它们的 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) {
...
}
}

关于ASP.NET RenderControl 或 RenderChildren 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1769557/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com