我最近学会了编写自己的 WebControls,但我仍然对 Render 和 RenderControl 之间的区别感到模糊。我开始使用 Render,但在某些时候我开始使用 RenderControl,我现在只使用它。如果我正在养成一个坏习惯,我想在我确定自己的方式之前把它扼杀在萌芽状态。
4 回答
这是一个很好的阅读: Render vs RenderControl
链接摘录:
Render方法使控制器能够通过将HTML 输出写入响应流来呈现自己。这会传递对 HTMLTextWriter 对象的引用,该对象可以直接写入响应流。当您直接从控件派生时,应使用此方法。
页面使用RenderControl方法来呈现每个单独的控件。它允许您的类的使用者呈现它,如果您使用复合控件,您可以使用它来呈现子控件。另外,需要注意的一点是,如果控件上的可见性属性设置为 false,则不会调用它。
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()?到目前为止给出的所有答案都缺少这种推理。第一个能解释它的人会得到一个闪亮的支持。
如果存在提供所需内容的现有控件,则使用 RenderControl,以便您可以利用其呈现方式。
如果您需要完全控制 html 的呈现方式,则使用 Render。
您当然可以将两者结合起来,以最优化地利用您的编程时间......
编辑
要对此进行更好的解释,以及何时使用的要点,请参阅mhenry1384的答案。
RenderControl 用于页面呈现子控件。渲染允许单个控件渲染自己。