WebControl创建中Render和RenderControl之间有什么区别?

Mic*_*zoe 17 asp.net render web-controls

我最近学会了编写自己的WebControls,但是我仍然对Render和RenderControl之间的差异感到朦胧.我开始使用Render,但在某些时候我开始使用RenderControl,我现在只使用它.如果我养成了一个坏习惯,我想在我按照自己的方式设定之前把它扼杀在萌芽状态.

o.k*_*k.w 17

这是一个很好的阅读: Render vs RenderControl

链接摘录:

渲染方法使得控制器通过HTML输出写入到响应流来呈现自身.这会传递对HTMLTextWriter对象的引用,该对象可以直接写入响应流.直接从控件派生时,应使用此方法.

RenderControl方法用于通过在网页来呈现每个单独的控制.它允许类的使用者渲染它,如果使用复合控件,则可以使用它来渲染子控件.另外,需要注意的一点是,如果控件上的visibility属性设置为false,则不会调用此方法.


mhe*_*384 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()?迄今为止给出的所有答案都没有找到原因.能够解释它的第一个人得到了一个闪亮的upvote.


awe*_*awe 5

如果存在提供所需内容的现有控件,则使用RenderControl,以便您可以利用渲染方式.

如果您需要完全控制html的呈现方式,则使用渲染.

您当然可以将两者结合起来,以便最佳地使用您的编程时间......

编辑
为了更好地解释这一点,以及何时使用的优​​点,请参阅mhenry1384的答案.