title: Asp.net button object - runat server issue
body: <p>I have a slight problem with creating a button on the server side code. I am using stringbuilder to build a table in html and I want to create a new button object and pass it into my stringbuilder object. The problem I have is my page doesn't compile when I am debugging. I want to give my button object a runat="server" property but I don't know how to.</p>
  
  <pre><code>Button add_img_popup = new Button();
              add_img_popup.Text = "Add new Image"; // text
              add_img_popup.Click += new EventHandler(addImgPopup_Click); // click event handler
              add_img_popup.Enabled = true;
              add_img_popup.ID = "btn_add_img_popup"; // programmatic id
  
              Page.Controls.Add(add_img_popup); // add to page controls so it renders
  
              st.Append("&lt;tr&gt;");
              st.Append("&lt;td&gt;");
              st.Append(add_img_popup); // pass to string builder
              st.Append("&lt;/tbody&gt;");
              st.Append("&lt;/table&gt;");
  </code></pre>
  
  <p>And the message the server gives me.</p>
  
  <hr>
  
  <h2>Server Error in '/' Application.</h2>
  
  <p>Control 'btn_add_img_popup' of type 'Button' must be placed inside a form tag with runat=server. 
  Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. </p>
  
  <p>Exception Details: System.Web.HttpException: Control 'btn_add_img_popup' of type 'Button' must be placed inside a form tag with runat=server.</p>
  
  <p>Source Error: </p>
  
  <p>An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  </p>
  
  <p>Stack Trace: </p>
  
  <p>[HttpException (0x80004005): Control 'btn_add_img_popup' of type 'Button' must be placed inside a form tag with runat=server.]
     System.Web.UI.Page.VerifyRenderingInServerForm(Control control) +8702387
     System.Web.UI.WebControls.Button.AddAttributesToRender(HtmlTextWriter writer) +54
     System.Web.UI.WebControls.WebControl.RenderBeginTag(HtmlTextWriter writer) +20
     System.Web.UI.WebControls.WebControl.Render(HtmlTextWriter writer) +20
     System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
     System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
     System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
     System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134
     System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19
     System.Web.UI.Page.Render(HtmlTextWriter writer) +29
     System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27
     System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99
     System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
     System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266</p>