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

Dha*_*ngh 57 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Dha*_*ngh 129

我解决了这个问题.正如我正在使用的那样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....
}
Run Code Online (Sandbox Code Playgroud)


小智 16

对我来说,这个问题是由一些引起的Response.Write在命令母版页的网站(代码后面).他们只是出于调试目的(这不是最好的方式,我知道)......


Tri*_*ped 9

Triggers在更新面板的标签中添加了控件:

    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="exportLinkButton" />
    </Triggers>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

这样 exportLinkBut​​ton 将触发 UpdatePanel 更新。
更多信息在这里


Muh*_*san 6

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


Nun*_*iro 6

1- 永远不要使用Response.Write.

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

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(lblbtndoc1);
Run Code Online (Sandbox Code Playgroud)


ray*_*ayt 5

对于我的VB.Net朋友 -

Dim scriptManager As ScriptManager = scriptManager.GetCurrent(Me.Page)
scriptManager.RegisterPostBackControl(Me.YourButtonNameHere)
Run Code Online (Sandbox Code Playgroud)