19

我最近学会了编写自己的 WebControls,但我仍然对 Render 和 RenderControl 之间的区别感到模糊。我开始使用 Render,但在某些时候我开始使用 RenderControl,我现在只使用它。如果我正在养成一个坏习惯,我想在我确定自己的方式之前把它扼杀在萌芽状态。

4

4 回答 4

17

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

链接摘录:

Render方法使控制器能够通过将HTML 输出写入响应流来呈现自己。这会传递对 HTMLTextWriter 对象的引用,该对象可以直接写入响应流。当您直接从控件派生时,应使用此方法。

页面使用RenderControl方法来呈现每个单独的控件。它允许您的类的使用者呈现它,如果您使用复合控件,您可以使用它来呈现子控件。另外,需要注意的一点是,如果控件上的可见性属性设置为 false,则不会调用它。

于 2009-10-31T01:26:41.667 回答
8

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()?到目前为止给出的所有答案都缺少这种推理。第一个能解释它的人会得到一个闪亮的支持。

于 2012-02-05T14:47:52.217 回答
6

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

如果您需要完全控制 html 的呈现方式,则使用 Render。

您当然可以将两者结合起来,以最优化地利用您的编程时间......

编辑
要对此进行更好的解释,以及何时使用的要点,请参阅mhenry1384的答案

于 2010-04-30T11:09:10.700 回答
2

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

于 2009-10-31T01:15:05.703 回答