摘要:[ASP.NET] UpdatePanel內將GridView內容轉成EXCEL
今天遇到一個小麻煩
就是GridView要轉成EXCEL
雖然之前有做過類似的,程式碼如下:
protected void Btn_GvToExcel_Click(object sender, EventArgs e)
{
Response.ClearContent();
Response.Write("
");
string s_fileName = "Y2J_Test.xls"
Response.AddHeader("content-disposition", "attachment;filename=" + Server.UrlEncode(s_fileName));
Response.ContentType = "application/excel";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
但是,會出現2個錯誤錯息
問題1:型別 'GridView' 的控制項 'GridView1' 必須置於有 runat=server 的表單標記之中
解決方法在後端.cs加入以下程式碼即可
public override void VerifyRenderingInServerForm(Control control)
{
// '處理'GridView' 的控制項 'GridView' 必須置於有 runat=server 的表單標記之中
}
問題2:Microsoft JScript 執行階段錯誤: Sys.WebForms.PageRequestManagerParserErrorException: 無法剖析從伺服器收到的訊息。這項錯誤通常的原因是回應被 Response.Write()、回應篩選條件、HttpModules 的呼叫修改了,或是已啟用伺服器追蹤。詳細資料: 剖析 near '<meta http-equiv=Con' 時發生錯誤。
頁面傳出錯誤訊息如下:
DEBUG模式下VS傳回錯誤訊息如下:
網路上找了很久終於找到解決辦法,問題原因是在AJAX 的通訊中不能使用 Response.Write() 來輸出資料
解決辦法為.....把要輸出Excel那個按鈕設定成 UpdatePanel 中 Triggers 的 PostBackTrigger 就可以了
使用整頁回傳即可解決此問題...
Y2J's Life:http://kimenyeh.blogspot.tw/