导出文档后响应关闭

时间:2011-05-08 13:40:52

标签: c# asp.net export-to-excel response.write export-to-word

我一直在尝试使用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控件。那么,我该如何管理呢?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您收到此行为是因为您正在更改当前页面的响应对象。由于页面回发,响应对象用于呈现最新的页面内容,现在是Word二进制内容。

我建议您执行以下操作之一:

  • 打开新页面并在新页面上实现上述代码以推送Word文档
  • 拥有iframe(您可能不想显示它)并将源设置为将推送Word内容的页面。这样您就可以保持当前页面而不会干扰流程。

答案 1 :(得分:0)

我会制作第二页并将所有单词导出内容放在第二页中。然后在原始的aspx页面中,对这个新页面执行response.redirect或者向它执行window.location,新页面将简单地流回文档。这样,用户就可以停留在原始页面上,一切都正常运行。

我建议在重定向到新页面之前使用会话,以获取生成word文档所需的任何参数。但是,查询字符串也可以正常工作。