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.
RenderControl(HtmlTextWriter) Outputs server control content to a provided HtmlTextWriter object and stores tracing information about the control if tracing is enabled.
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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With