Exportar datos de gridview a una hoja de Excel está dando error

Tengo una aplicación asp.net en la que estoy mostrando una vista de cuadrícula cuyo código se muestra a continuación

<center><asp:GridView ID="GridView1" runat="server" RowStyle-HorizontalAlign="Center" CellPadding="4" ForeColor="#333333" GridLines="None"> <AlternatingRowStyle BackColor="White" /> <FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" /> <RowStyle HorizontalAlign="Center" BackColor="#FFFBD6" ForeColor="#333333"></RowStyle> <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" /> <SortedAscendingCellStyle BackColor="#FDF5AC" /> <SortedAscendingHeaderStyle BackColor="#4D0000" /> <SortedDescendingCellStyle BackColor="#FCF6C0" /> <SortedDescendingHeaderStyle BackColor="#820000" /> </asp:GridView> </center> <center> <table> <tr> <td> <asp:Button ID="btnWordConvert" runat="server" Text="Button" onclick="btnWordConvert_Click" /> </td> </tr> </table> </center> 

en cs

  protected void btnWordConvert_Click(object sender, EventArgs e) { GridView1.AllowPaging = false; GridView1.DataBind(); Response.ClearContent(); Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "Customers.doc")); Response.Charset = ""; Response.ContentType = "application/ms-word"; StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); GridView1.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); } 

recibo un error en GridView1.RenderControl(htw); línea y el error es Control 'ctl00_ContentPlaceHolder1_GridView1' of type 'GridView' must be placed inside a form tag with runat=server. Cualquier ayuda es apreciada.

La razón por la que está recibiendo esto es que un control de server se representa fuera de una label de formulario llamando a GridView.RenderControl (HtmlTextWriter) .

Puede evitar esto anulando VerifyRenderingInServerForm .

Echa un vistazo a esto .

Pon tu código dentro de la label de formulario.

 <form id="form1" runat="server"> //put your code here </form> 

Asegúrese de que su vista de cuadrícula esté dentro de la label de formulario .

  <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" RowStyle-HorizontalAlign="Center" CellPadding="4" ForeColor="#333333" GridLines="None"> ... ... ... </asp:GridView> </form> 

poner el siguiente método

 public override void VerifyRenderingInServerForm(Control control) { /* Verifies that the control is rendenetworking */ }