通常項目開發需要把頁面上指定內容儲存為WORD/EXCEL等檔案形式,網上採用比較簡單的方法如下:
Code
protected void btnPageToWord_Click(object sender, ImageClickEventArgs e)
{
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw);
this.jjqqhb_container.Page.EnableViewState = false;
this.jjqqhb_container.RenderControl(htw);
Response.Buffer = true;
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/ms-word";
Response.Charset = "utf-8";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Response.AddHeader("Content-Disposition", "attachment;filename=1.doc");
Response.Write(sw.ToString());
Response.Flush();
Response.Close();
}
其中jjqqhb_container包含的HTML代碼就是需要轉換為檔案的內容
但是轉換過程出現了3個小問題
(1)儲存的WORD文檔上出現"表單頂端","表單底端"等多餘資訊
解決辦法:因為控制項在<form></form>中,故有表單資訊,你可以刪掉它,把控制項放body裡編輯
(2) ........會發生只能在執行 Render() 的過程中調用 RegisterForEventValidation的錯誤提示
解決辦法:this.jjqqhb_container.Page.EnableViewState = false;或者直接修改頁面
<%@ Page Language="C" EnableEventValidation = "false" AutoEventWireup="true" .....>
(3) 類型“XX”的控制項“XX”必須放在具有 runat=server 的表單標記內
解決辦法:在後台檔案中重載VerifyRenderingInServerForm方法,如下所示。
Code
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}