通常项目开发需要把页面上指定内容保存为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);
}