在C#里面做数据导出的时候,例如将GridView数据导出到excel时可能会遇到以下两种问题:
问题(一):类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内
可能的解决方案:
在导出页面后台重载page的VerifyRenderingInServerForm方法,如下:
public override void VerifyRenderingInServerForm(Control control) { }
问题(二):只能在执行 Render() 的过程中调用 RegisterForEventValidation
可能的解决方案:
修改Page的EnableEventValidation属性,修改该属性也有三种方法,如下:
方法1:在Web.Config文件中:在<system.web></system.web> 标记中添加如下代码:
<system.web>
<pages enableEventValidation="false"></pages>
</system.web>
方法2:在具体的 .aspx 页面的源代码中修改代码:
<%@ Page Language="C#" EnableEventValidation="false" ... %>
方法3:在 .cs 源代码中修改 Page 属性:
this.Page.EnableEventValidation = false;
EnableEventValidation 属性是 .NET Framework 2.0 中是新增的属性,默认的情况下该属性的值为 true;通过这个新增的功能 ASP.NET 会检查 POST 方法中的所带的参数,如果认为不合法,就会抛出异常。这个设计的目的是为了防止恶意用户利用post 方法发送一些恶意数据,但是有时也会出现类似上面的错误。
只要禁止这个功能,问题就能得到解决。