我一直在尝试使用ASP.Net将Word文档导出到Response中。所以我用这段代码实现了这个目标。
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.ContentEncoding = Encoding.UTF8;
Response.Charset = "UTF-8";
Response.Buffer = true;
this.EnableViewState = false;
Response.ContentType = "application/msword";
Response.AddHeader("content-disposition", "attachment;filename=ExportedData" + Guid.NewGuid().ToString().Remove(5) + ".docx");
var wordData = this.RequestService.ExportToWord(this.RequestItem);
Response.BinaryWrite(wordData);
Response.Flush();
//Response.Clear();
//Response.End();
//Response.Close();
//RedirectToSamePage();
//Response.Flush();
但问题是,当用户将页面导出为word文档时,页面的其他功能会消失。就像,你不能点击另一个ASP控件,因为结束Response对象,杀死ASP控件与DLL的连接。因此,正如您从评论代码中看到的那样,我一直在调用一些Response对象函数,但是在导出操作之后我仍然无法管理其他ASP控件。那么,我该如何管理呢?
提前致谢。
答案 0 :(得分:3)
您收到此行为是因为您正在更改当前页面的响应对象。由于页面回发,响应对象用于呈现最新的页面内容,现在是Word二进制内容。
我建议您执行以下操作之一:
答案 1 :(得分:0)
我会制作第二页并将所有单词导出内容放在第二页中。然后在原始的aspx页面中,对这个新页面执行response.redirect或者向它执行window.location,新页面将简单地流回文档。这样,用户就可以停留在原始页面上,一切都正常运行。
我建议在重定向到新页面之前使用会话,以获取生成word文档所需的任何参数。但是,查询字符串也可以正常工作。