public static void GridViewToExcel(GridView gv, string excelName)
{
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + excelName + ".xls"); //关闭 ViewState
//this.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw);
//获取control的HTML
gv.RenderControl(hw);
//把HTML写回浏览器
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
tw.Close();
hw.Close();
}
调用这个方法报错
错误如下:“/AlbumFoundation”应用程序中的服务器错误。
--------------------------------------------------------------------------------类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。源错误:
行 296: System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw);
行 297: //获取control的HTML
行 298: gv.RenderControl(hw);
行 299: //把HTML写回浏览器
行 300: HttpContext.Current.Response.Write(tw.ToString());
源文件: d:\Projects\AlbumFoundation.root\AlbumFoundation\WebSites\AlbumFoundation\orders\OrderExpiredata.aspx.cs 行: 298 堆栈跟踪:
[HttpException (0x80004005): 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。]
System.Web.UI.Page.VerifyRenderingInServerForm(Control control) +8693171
System.Web.UI.WebControls.GridView.Render(HtmlTextWriter writer, Boolean renderPanel) +40
System.Web.UI.WebControls.GridView.Render(HtmlTextWriter writer) +33
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
orders_OrderExpiredata.GridViewToExcel(GridView gv, String excelName) in d:\Projects\AlbumFoundation.root\AlbumFoundation\WebSites\AlbumFoundation\orders\OrderExpiredata.aspx.cs:298
orders_OrderExpiredata.btnExcel_Click(Object sender, EventArgs e) in d:\Projects\AlbumFoundation.root\AlbumFoundation\WebSites\AlbumFoundation\orders\OrderExpiredata.aspx.cs:327
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
{
HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + excelName + ".xls"); //关闭 ViewState
//this.EnableViewState = false;
System.IO.StringWriter tw = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw);
//获取control的HTML
gv.RenderControl(hw);
//把HTML写回浏览器
HttpContext.Current.Response.Write(tw.ToString());
HttpContext.Current.Response.End();
tw.Close();
hw.Close();
}
调用这个方法报错
错误如下:“/AlbumFoundation”应用程序中的服务器错误。
--------------------------------------------------------------------------------类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。源错误:
行 296: System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(tw);
行 297: //获取control的HTML
行 298: gv.RenderControl(hw);
行 299: //把HTML写回浏览器
行 300: HttpContext.Current.Response.Write(tw.ToString());
源文件: d:\Projects\AlbumFoundation.root\AlbumFoundation\WebSites\AlbumFoundation\orders\OrderExpiredata.aspx.cs 行: 298 堆栈跟踪:
[HttpException (0x80004005): 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。]
System.Web.UI.Page.VerifyRenderingInServerForm(Control control) +8693171
System.Web.UI.WebControls.GridView.Render(HtmlTextWriter writer, Boolean renderPanel) +40
System.Web.UI.WebControls.GridView.Render(HtmlTextWriter writer) +33
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
orders_OrderExpiredata.GridViewToExcel(GridView gv, String excelName) in d:\Projects\AlbumFoundation.root\AlbumFoundation\WebSites\AlbumFoundation\orders\OrderExpiredata.aspx.cs:298
orders_OrderExpiredata.btnExcel_Click(Object sender, EventArgs e) in d:\Projects\AlbumFoundation.root\AlbumFoundation\WebSites\AlbumFoundation\orders\OrderExpiredata.aspx.cs:327
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565
{
}
顺便在aspx页面<%@page ......%>里面添加 EnableEventValidation = "false",就可以解决你的问题了