Sys.WebForms.PageRequestManagerParserErrorException:无法解析从服务器收到的消息

时间:2012-06-27 07:06:55

标签: c# asp.net

我的网页上有网格视图,我想将其导出到Excel工作表, 下面是我为完成此任务而编写的代码,这里我已经将数据集传递给绑定网格的方法,btnExcelExport是将网格内容导出到Excel工作表的按钮: -

private void BindGridView(DataSet ds)
{
    if (ds.Tables.Count > 0)
    {
        if (ds.Tables[0].Rows.Count > 0)
        {
            GVUserReport.DataSource = ds;
            GVUserReport.DataBind();
            btnExcelExport.Visible = true;
        }
    }
}

protected void btnExcelExport_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.AddHeader("content-disposition","attachment;filename=FileName.xls");
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "application/vnd.xls";
    System.IO.StringWriter stringWrite = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
    GVUserReport.RenderControl(htmlWrite);
    Response.Write(stringWrite.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    return;
}

现在,当我调试时,我发现网格已成功绑定,但在尝试将其导出到Excel时,我收到此错误:

  

“Microsoft JScript运行时错误:   Sys.WebForms.PageRequestManagerParserErrorException:消息   从服务器收到的邮件无法解析。“

9 个答案:

答案 0 :(得分:124)

我解决了这个问题。当我使用UpdatePanel时,我在页面的Page_Load事件中添加了以下代码,它对我有用:

protected void Page_Load(object sender, EventArgs e) {
  ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
  scriptManager.RegisterPostBackControl(this.btnExcelExport);
  //Further code goes here....
}

答案 1 :(得分:15)

就我而言,问题是由网站母版页上的一些 Response.Write 命令引起的(代码隐藏)。他们只是出于调试目的(这不是最好的方式,我知道)......

答案 2 :(得分:5)

1- 从不使用Response.Write。

2-我在创建(不是在Page_Load中)一个LinkBut​​ton(动态)之后把代码放在下面并解决了我的问题:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(lblbtndoc1);

答案 3 :(得分:5)

对于我的VB.Net好友 -

Dim scriptManager As ScriptManager = scriptManager.GetCurrent(Me.Page)
scriptManager.RegisterPostBackControl(Me.YourButtonNameHere)

答案 4 :(得分:4)

我将控件添加到更新面板中的Triggers标记:

    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="exportLinkButton" />
    </Triggers>
</asp:UpdatePanel>

这样,exportLinkBut​​ton将触发UpdatePanel更新 更多信息here

答案 5 :(得分:3)

将此添加到您的PageLoad,它将解决您的问题:

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(this.lblbtndoc1);

答案 6 :(得分:3)

我遇到了同样的错误,然后我尝试了 <asp:PostBackTrigger ControlID="xyz"/> 而不是 AsyncPostBackTrigger 。这对我有用。这是因为我们不想要部分回发。

答案 7 :(得分:1)

This也为我工作,但有一个补充(下图)。

protected void Page_Load(object sender, EventArgs e) {
  ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
  scriptManager.RegisterPostBackControl(this.btnExcelExport);
  //Further code goes here....
}

我在我的按钮上注册了一个脚本,在事件处理完毕后点击另一个按钮。为了使它工作,我不得不从更新面板中删除另一个按钮(以防万一有人面临同样的问题)。

答案 8 :(得分:0)

对我有用的是在inetpub VirtualDirectories \ 443 \ web.config文件的appSettings标记上将aspnet:MaxHttpCollectionKeys设置为较高的值:

<configuration>
    <appSettings>
        <add key="aspnet:MaxHttpCollectionKeys" value="100000" />
    </appSettings>
</configuration>