錯誤消息:
Sys.WebForms.PageRequestManagerParserErrorException: 無法分析從服務器收到的消息。之所以出現此錯誤,常見的原因是: 在通過調用 Response.Write() 修改響應時,將啓用響應篩選器、HttpModule 或服務器跟蹤。
發生狀況:
頁面使用了ajax的UpdatePanels,在使用excel導出時,使用了Response.WriteFile這樣的方法,所以出現上述錯誤。
解決辦法:
1、將使用了Response.Write的控件放到啊UpdatePanels外面,或者將UpdatePanels刪除。當然大多數情況下,我們是不可以刪除UpdatePanels的。
2、如果控件的名稱是唯一的,可以使用在UpdatePanels裏增加PostBackTrigger ,並制定controlid爲你的控件:
<Triggers><asp:PostBackTrigger ControlID="btnExport" /></Triggers>
3、如果你的控件是動態的,比如在gridview每行中都有的按鈕,可以使用ScriptManager.RegisterPostBackControl()來註冊你的控件
protected void gvGirdView_RowDataBound(object sender, GridViewRowEventArgs e)
{
//不爲表頭
if (e.Row.RowType == DataControlRowType.DataRow)
{
//含有ajax的updatepanel的頁面必須將想要使用Response.Write的控件註冊PostBackControl
//本業務使用了excel導出,所以必須綁定
//我的業務用到了模板頁,ScriptManager 定義在模板頁上,所以使用this.Parent.Parent到上級去找ScriptManager
//實際可根據自己程序情況查找
ScriptManager smManage = (ScriptManager)this.Parent.Parent.FindControl("smManage ");
if (e.Row.FindControl("btExport") != null)
{
smManage .RegisterPostBackControl(e.Row.FindControl("btExport"));
}
}
}