我最近学会了编写自己的WebControls,但我仍然对Render和RenderControl之间的差异感到朦胧。我开始使用Render,但在某些时候我开始使用RenderControl,我现在只使用它。如果我养成了一个坏习惯,我想在我按照自己的方式设置之前把它扼杀在萌芽状态。
答案 0 :(得分:17)
这是一个很好的阅读: Render vs RenderControl
摘自链接:
Render 方法可启用 控制器通过写入来呈现自己 HTML输出到响应流。 这传递了对。的引用 HTMLTextWriter对象,可以编写 直接到响应流。这个 派生时应该使用方法 直接来自控制。
使用 RenderControl 方法 通过页面呈现每个人 控制。它允许消费者 你的班级来渲染它,你可以 用它来渲染子控件if 你正在使用复合控件。 另外,有一点需要注意的是这一点 如果可见性将不会被调用 控件上的属性设置为 假的。
答案 1 :(得分:8)
Render是一个受保护的方法,这意味着只有派生类才能访问它。它在Event Lifecycle中调用,不应在代码中显式调用。
RenderControl是一个公共方法,允许您在需要时调用Render方法。您可以在自定义控件中使用它,您可以在ControlsCollection中存储控件,但希望在表格中的自己的单元格中渲染它们。例如:
writer.Write(""): foreach(Control ctl in Controls) { writer.Write("") ctl.RenderControl(writer); writer.Write(""); } writer.Write("");
你应该总是覆盖Render,而不是RenderControl,因为它在Event Lifecycle中被调用(正如我已经说过的那样)
(来自http://forums.asp.net/t/909220.aspx/1,对不起,我的答案只是复制并粘贴了,但我没有看到重写这么明确的解释很多点)
我仍然不明白为什么MS不会简单地将Render()作为公共方法。为什么需要单独的RenderControl()?迄今为止给出的所有答案都没有找到原因。能够解释它的第一个人获得了闪亮的赞成。
答案 2 :(得分:5)
如果存在提供所需内容的现有控件,则使用RenderControl,以便您可以利用渲染方式。
如果您需要完全控制html的呈现方式,则使用渲染。
您当然可以将两者结合起来,以便最佳地使用您的编程时间......
修改强>
有关此问题的更好解释以及在何时使用的优点,请参阅the answer from mhenry1384。
答案 3 :(得分:2)
RenderControl用于呈现子控件的页面。渲染允许单个控件自我渲染。