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

我在我的网页上有一个网格视图,我想将其导出到Excel工作表,下面是我写的代码来做这个任务,在这里我已经传递数据集的方法来绑定网格和btnExcelExport是button将网格内容导出到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; } 

现在当我debugging时,发现网格绑定成功,但试图将其导出到Excel时,我得到这个错误:

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

我解决了这个问题。 当我使用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.... } 

在我的情况下,这个问题是由网站母版页 (后面的代码)的一些Response.Write命令引起的。 他们在那里只是为了debugging目的(这不是最好的方法,我知道)…

我有同样的错误,然后我试着<asp:PostBackTrigger ControlID="xyz"/>而不是AsyncPostBackTrigger 。这对我工作。 这是因为我们不想要部分回传。

添加这个给你PageLoad,它会解决你的问题:

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

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

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

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

1- 不要使用Response.Write。

2-创build(而不是在Page_Load)一个LinkBut​​ton(dynamic)后,下面的代码并解决了我的问题:

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

这也适用于我,但有一个补充(下)。

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

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