[ASP.NET] UpdatePanel 內將 GridView 內容轉成 EXCEL

  • 10929
  • 0
  • 2013-03-28

摘要:[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 就可以了

使用整頁回傳即可解決此問題...angry


    

 

 






Y2J's Life:http://kimenyeh.blogspot.tw/