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 年后的今天看到这个时,我完全同意你的看法。 mhenry1384o.k.w 的答案要好得多。【参考方案4】:

RenderControl 用于页面呈现子控件。渲染允许单个控件渲染自己。

【讨论】:

以上是关于WebControl 创建中的 Render 和 RenderControl 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

更新面板 webcontrol 所需的表单字段

将可重用的 ASP.NET WebControl 连接到加载数据的方法

在 asp.net 中,如何从 usercontrol 获取自定义 webcontrol 的引用?

如何在asp.net mvc中将Webcontrol表导出到excel

呈现时如何从 WebControl 中删除 span 标签

海康视频WEB插件 V1.5.2 开发总结