• RegisterForEventValidation can only be called during Render()
  • 发布于 2个月前
  • 187 热度
    4 评论
  • 石梁发
  • 1 粉丝 38 篇博客
  •   

我在导出Gridview中的数据时系统报如下错误:

RegisterForEventValidation can only be called during Render();

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.
Exception Details: System.InvalidOperationException: RegisterForEventValidation can only be called during Render();
Source Error:
Line 34: 
Line 35:             GVList.DataBind(); Line 36:             GVList.RenderControl(htmlwrite); Line 37:             Response.Write(sw.ToString());
Line 38:             Response.Flush();
我后台导出Gridview的代码如下

        protected void btnExportGrid_Click(object sender, EventArgs e)
        {
            GVList.AllowPaging = false;
            StringWriter sw = new StringWriter();
            HtmlTextWriter htmlwrite = new HtmlTextWriter(sw);
            string excelName = "ExportList.xls";
            Response.ContentType = "application/ms-excel";
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(excelName));
            GVList.DataBind();
            GVList.RenderControl(htmlwrite);
            Response.Write(sw.ToString());
            Response.Flush();
            Response.End();
            GVList.AllowPaging = true;
            GVList.DataBind();
        }
        public override void VerifyRenderingInServerForm(Control control)
        {
            // Confirms that an HtmlForm control is rendered for        
            //如果要限制控件必须位于<form runat=server>标记以内,则请先呼叫这个方法,才进行展现,如此一来,如果控件放在标记以外,便会显示错误信息。
        }
有谁遇到过类似的从Gridview导出数据出现这种问题的吗?该怎么解决?


用户评论
  • 江湖浪子
  • 张犇  2018-11-22 17:44

    ASP.NET的页面中添加EnableEventValidation="false"这句有什么用?这个属性是干嘛用的?


    EnableEventValidation属性用来获取或设置一个值,该值指示页面验证回发事件还是验证回调事件,如果要验证回发和回调事件则设置成true,否则设置成false 。

    备注:

    当EnableEventValidation属性设置为true,ASP.NET 验证控件事件源自已由该控件呈现用户界面。 控件在呈现期间注册其事件,然后在回发或回调处理过程中验证事件。 例如,如果列表控件包含编号 1、 2 或 3 时呈现页面,并指定选项编号 4 收到的回发请求的选项,ASP.NET 将引发异常。 在 ASP.NET 中的所有事件驱动控件默认情况下都使用此功能。

    如果要编写在运行时更改客户端中的控件的客户端脚本,您可能必须使用RegisterForEventValidation方法,以避免出现 false 事件验证错误。

     重要提示:此功能可以减少未经授权或恶意的回发请求和回调的风险。 强烈建议您不要禁用事件验证。

  • 2018/11/22 17:48:00 [ 0 ] [ 0 ] 回复
  • 李宏荣
  • 李寒  2018-11-22 17:37

    前台的.aspx页面有添加EnableEventValidation="false"标记吗?类似这样:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListInfo.aspx.cs" Inherits="OverTime.WebUI.ListInfo"  EnableEventValidation="false"%>

    楼上正解,我以前用Gridview导出Excel数据时也遇到过这种问题,加一句EnableEventValidation="false"就OK了

  • 2018/11/22 17:38:00 [ 0 ] [ 0 ] 回复
  • 李寒
  • 前台的.aspx页面有添加EnableEventValidation="false"标记吗?类似这样:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListInfo.aspx.cs" Inherits="OverTime.WebUI.ListInfo"  EnableEventValidation="false"%>

  • 2018/11/22 17:37:00 [ 1 ] [ 0 ] 回复