3

我一直在尝试使用 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 的连接。因此,从注释代码中可以看出,我一直在调用一些响应对象函数,但在导出操作后我仍然无法管理其他 ASP 控件工作。那么,我该如何管理呢?

提前致谢。

4

2 回答 2

3

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

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

  • 调出一个新页面,在新页面上实现上述代码推送Word文档
  • 有一个 iframe(您可能不想显示它)并将源设置为将推送 Word 内容的页面。这将允许您留在当前页面而不会干扰流程。
于 2011-05-08T13:48:20.640 回答
0

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

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

于 2011-05-08T13:44:26.947 回答