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

时间:2009-10-31 01:08:59

标签: asp.net render web-controls

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

4 个答案:

答案 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用于呈现子控件的页面。渲染允许单个控件自我渲染。