Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between Render and RenderControl in WebControl creation?

I've recently learned to write my own WebControls, but I'm still hazy on the difference between Render and RenderControl. I started out using Render, but at some point I started using RenderControl, which I now use exclusively. If I'm forming a bad habit I'd like to nip it in the bud now before I get set in my ways.

like image 575
Michael Itzoe Avatar asked Oct 31 '09 01:10

Michael Itzoe


People also ask

What is RenderControl?

RenderControl(HtmlTextWriter) Outputs server control content to a provided HtmlTextWriter object and stores tracing information about the control if tracing is enabled.

What is Render method in asp net?

The Render method is responsible for creating the text and markup that is sent to the client browser. The default Render method calls RenderChildren to write the text and markup for the controls contained on the page.


3 Answers

Here's a good read: Render vs RenderControl

Excerpt from links:

The Render method enables the controller to render itself by writing HTML output to the response stream. This passes a reference to the HTMLTextWriter object, which can write directly to the response stream. This method should be used when you derive directly from control.

The RenderControl method is used by the page to render each individual control. It allows the consumer of your class to render it, and you can use it to render the child controls if you're using a composite control. Also, one thing to note is that this will not be invoked if the visibility property on the control is set to false.

like image 198
o.k.w Avatar answered Nov 01 '22 19:11

o.k.w


Render is a protected method, meaning that only derived Classes can access it. It is called within the Event Lifecycle, and shouldn't be explicitly called in your code.

RenderControl is a public method that allows you to call the Render method when you want. You would use it in, say, a Custom Control where you store Controls in the ControlsCollection but want to Render them in their own cell in a table. For example:

   writer.Write(""):
   foreach(Control ctl in Controls)
   {
      writer.Write("")
      ctl.RenderControl(writer);
      writer.Write("");
   }
   writer.Write("");

You should always override Render, and not RenderControl, as it is called in the Event Lifecycle (as I have already said)

(from http://forums.asp.net/t/909220.aspx/1, sorry my answer is just a copy-and-paste from that, but I didn't see much point rewriting such a crystal clear explanation)

I still don't understand why MS didn't simply make Render() a public method. Why is a separate RenderControl() necessary? The reasoning for that is missing from all the answers given so far. The first person who can explain it gets a shiny upvote.

like image 30
mhenry1384 Avatar answered Nov 01 '22 19:11

mhenry1384


RenderControl is used if there is an existing control that provides what you want so you can take advantage of how that is rendered.

Render is used if you need to take full control over how the html is rendered.

You can of course combine the two for the most optimal use of your programming time...

EDIT
For a better explanation on this, and excellent point to what to use when, see the answer from mhenry1384.

like image 45
awe Avatar answered Nov 01 '22 19:11

awe