Response.AddHeader("content-disposition", "attachment;filename=CRM.xls")
Response.Charset = ""
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.ContentType = "application/vnd.xls" Dim stringWrite As StringWriter = New System.IO.StringWriter()
Dim htmlWrite As HtmlTextWriter = New HtmlTextWriter(stringWrite) GridView1.RenderControl(htmlWrite)
Response.Write(stringWrite.ToString())
Response.End()

结果报:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内

但是奇怪的是,如果我把GridView改成用DataGrid,上面的代码却是能导出Excel文档的。
那么是GridView和DataGrid之间的什么差别产生了这种情况?!

在页面中重写Page基类的VerifyRenderingInServerForm方法
     public override void VerifyRenderingInServerForm(Control control)
    {
        // Confirms that an HtmlForm control is rendered for
    }
MSDN对该方法的解释如下:

必须位于 <form runat=server> 标记中的控件可以在呈现之前调用此方法,以便在控件被置于标记外时显示错误信息。发送回或依赖于注册的脚本块的控件应该在 Control.Render 方法的重写中调用此方法。呈现服务器窗体元素的方式不同的页可以重写此方法以在不同的条件下引发异常。

如果回发或使用客户端脚本的服务器控件没有包含在 HtmlForm 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 HtmlForm 控件中时提供明确的错误信息。

开发自定义服务器控件时,通常在为任何类型的输入标记重写 Render 方法时调用该方法。这在输入控件调用 GetPostBackEventReference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。

GridView默认用到ViewState所以需要runat=server
我猜是DataGrid不加分页之类的功能默认是不用ViewState的

类型“GridView”的控件必须放在具有 runat=server 的窗体标记内?的更多相关文章

  1. GridView”的控件 必须放在具有 runat=server 的窗体标记内 “错误提示”

    在做导出数据到EXCEL程序中,出现了错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记 解决办法  重写 VerifyRendering ...

  2. 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。

    错误的写法:  if (this.GridView1.Rows.Count > 0)         {             string style = @"<style& ...

  3. 错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内 .

    错误提示:类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内 在做导出数据到EXCEL程序中,出现了错误提示:类型“GridView”的控件“Gr ...

  4. 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常

    导出到Excel方法: <span style="color: rgb(0, 0, 255);">public</span> <span style= ...

  5. 关于类型“LinkButton”的控件“xxx”必须放在具有 runat=server 的窗体标记内问题的解决方案

    1.首先确认LinkButton控件包含在Form中,检查该Form有无runat标记,如果有,排除Form原因,请继续看. 2.如果看到这里,估计你是在做Excel导出功能.在后台代码中重写Veri ...

  6. 类型“XXX”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。

    问题:类型“Grid1”的控件“XXXX”必须放在具有 runat=server 的窗体标记内. 注:Grid1为表格的ID. 查找网上的解决大致为: 1)把Grid放到<form runat= ...

  7. 注意:"AspNetPager”的控件“AspNetPager1”必须放在具有 runat=server 的窗体标记内

    应加: <form id="form1" runat="server"> </form> 否则一开始什么也不显示,页面控件看不见,加上a ...

  8. dev的控件放在没有runat="server"的标签中,回调出现的问题

    dev的控件放在没有runat="server"的标签中,第一次回调是会刷新页面, 有runat="server"时不会刷新页面

  9. GridView数据绑定控件的模版列时设置显示的格式

    形式 语法 结果 数字 {0:N2} 12.36   数字 {0:N0} 13   货币 {0:c2} $12.36   货币 {0:c4} $12.3656   货币 "¥{0:N2}&q ...

随机推荐

  1. mac关机快捷键

    1.Ctrl + 关机:弹出关机提示 2.Ctrl + Option + 关机 : 正常关机快捷键 3.Command + Option + 关机 :进入休眠状态 4.Ctrl + Command + ...

  2. jmeter从外部文件取值问题,如果文件中的参数值为纯数字形式的,jmeter会默认将其识别成int型数据

    如果你通过CSV Data Set Config或者_StringFromFile函数来参数化你的请求,需要特别注意当参数为纯数字时,jmeter会默认将其识别成int型数据,说明jmeter并不是默 ...

  3. 一:python入门

    Python简介 这点就不做陈述了,相信各位朋友已经已经有了一定的了解. Python特色: 1:简单 第一次接触Python给我的感觉它的语法阅读就像是阅读一本英文书的目录一样,简单易懂,它的语法要 ...

  4. Struts2 stracture

  5. img的问题

    一个div的宽高比和 里面的img的宽高比是一样的 ,div  img { width:100%:height:100%;} img {border:0}   img{ 设置为border:none无 ...

  6. Matches Puzzle Game

    Matches Puzzle Game 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5456 数位DP 首先我把C-A=B改为A+B=C(我觉得会简单 ...

  7. Android的JNI(NDK)使用备忘

    1.在cygwin中给ndk-build工具设置环境变量,使其在任何目录下可以被调用:在cygwin的安装目录:C:\cygwin下找到etc目录,再打开其中的profile文件,再其path行增加n ...

  8. linux反弹shell

    参考链接 http://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html http://www.waitalone.cn/linux-s ...

  9. Sublime Text 2

    常用功能: 安装Package Control:https://sublime.wbond.net/ 多行选择.多行编辑鼠标选中多行,按下 Ctrl+Shift+L (Command+Shift+L) ...

  10. 苹果4S

    港版.4S.白.非翻新机.16G.联通3G移动2G电信2G 1000 美版.4S.白.翻新.16G.联通3G移动2G电信3G 980