WebControl 创建中的 Render 和 RenderControl 有啥区别?
Posted
技术标签:
【中文标题】WebControl 创建中的 Render 和 RenderControl 有啥区别?【英文标题】:What's the difference between Render and RenderControl in WebControl creation?WebControl 创建中的 Render 和 RenderControl 有什么区别? 【发布时间】:2010-12-11 19:15:37 【问题描述】:我最近学会了编写自己的 WebControl,但我仍然对 Render 和 RenderControl 之间的区别感到困惑。我开始使用 Render,但在某些时候我开始使用 RenderControl,我现在只使用它。如果我正在养成一个坏习惯,我想现在就将它扼杀在萌芽状态,然后再按我的方式行事。
【问题讨论】:
【参考方案1】:这是一个很好的阅读: Render vs RenderControl
链接摘录:
Render 方法启用 控制器通过编写来呈现自己 html 输出到响应流。 这传递了对 HTMLTextWriter 对象,可以写 直接到响应流。这 推导时应使用方法 直接来自控制。
使用RenderControl方法 按页面呈现每个人 控制。它允许消费者 你的班级来渲染它,你可以 使用它来呈现子控件,如果 您正在使用复合控件。 另外,需要注意的一点是,这 如果可见性将不会被调用 控件上的属性设置为 假的。
【讨论】:
【参考方案2】:Render 是一个受保护的方法,这意味着只有派生类可以访问它。它在事件生命周期内调用,不应在您的代码中显式调用。
RenderControl 是一个公共方法,允许您在需要时调用 Render 方法。例如,您将在自定义控件中使用它,您将控件存储在 ControlsCollection 中,但希望将它们呈现在表格中自己的单元格中。例如:
writer.Write(""): foreach(控制中的控制 ctl) writer.Write("") ctl.RenderControl(作家); writer.Write(""); writer.Write("");您应该始终覆盖 Render,而不是 RenderControl,因为它在事件生命周期中被调用(正如我已经说过的)
(来自http://forums.asp.net/t/909220.aspx/1,抱歉我的回答只是复制粘贴,但我认为重写如此清晰的解释没有什么意义)
我仍然不明白为什么 MS 不简单地将 Render() 设为公共方法。为什么需要单独的 RenderControl()?迄今为止给出的所有答案都缺少其原因。第一个能解释它的人会得到一个闪亮的支持。
【讨论】:
+1 详细介绍了有关系统的一些令人困惑的部分。帮助为我描绘了一幅更完整的画面。 查看 okw 的答案,我看到将两者分开的一点是,RenderControl
提供了一些自动开销(例如,如果可见性将不会呈现设置为 false),因此控件的创建者只需要为呈现的控件提供 HTML,而不必担心检查是否应该呈现它。这可能取决于控件层次结构,而不仅仅是控件自己的可见性属性。请记住,Render
覆盖代码直接写入流 - 而不是调用可以为您检查的 som 对象代码。【参考方案3】:
如果存在提供您想要的控件的现有控件,则使用 RenderControl,以便您可以利用它的呈现方式。
如果您需要完全控制 html 的渲染方式,则使用渲染。
您当然可以将两者结合起来,以最优化地利用您的编程时间...
编辑 要对此进行更好的解释,以及何时使用什么,请参阅the answer from mhenry1384。
【讨论】:
这个答案并没有真正解释差异。请注意,在这两种情况下,我们都有“提供所需内容的现有控件” - 控件是类的实例。这个不清楚。 @Jakub 当我在写这篇文章 8 年后的今天看到这个时,我完全同意你的看法。 mhenry1384 和 o.k.w 的答案要好得多。【参考方案4】:RenderControl 用于页面呈现子控件。渲染允许单个控件渲染自己。
【讨论】:
以上是关于WebControl 创建中的 Render 和 RenderControl 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
将可重用的 ASP.NET WebControl 连接到加载数据的方法
在 asp.net 中,如何从 usercontrol 获取自定义 webcontrol 的引用?