24 January 2012

VerifyRenderingInServerForm Method

Problem: Sometimes you can get "...must be placed inside a form tag with runat=server" error, when you deal with "asp:panel" or "asp:linkbutton" or whatever else scenarious when html form control needs to be rendered for the specified control at run time. 
Solution The problem can be solved ovverriding Page.VerifyRenderingInServerForm Method. Confirms that an HtmlForm control is rendered for the specified ASP.NET server control at run time.

So, the code would look like the following (rendering asp:panel containing controls itself):
private void Page_Load(object sender, EventArgs e)
{
   StringWriter stringWriter = new StringWriter();
   HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
   contentPanel.RenderControl(htmlWriter);
   string s = stringWriter.ToString();
    Response.Write(s);
    Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
   return;
}