0

我查看了许多资源,以下应该可以工作,但是我的另存为对话框从未显示(不是特定于浏览器):

Response.ContentType = "application/octet-stream";
string downloadName = "Request "+request.RequestID+ "_researchExport.doc";
Response.AddHeader("Content-Length", 
    new System.IO.FileInfo(FileName).Length.ToString());
Response.AddHeader("Content-Disposition", 
    string.Format("attachment; filename={0};", downloadName));
Response.WriteFile(FileName);
Response.Flush();
Response.End();

该文件肯定存在。我还尝试了以下方法:

  1. Response.TransmitFile(FileName)改为使用

  2. 离开了Response.End()

  3. 省略Content-Length标题

  4. 使用this.ControllerContext.HttpContext.Response

任何帮助将不胜感激

4

2 回答 2

2

不确定这是否是您唯一的问题,但Content-Disposition标题中的文件名应该是 aquoted-string,因此您需要在它周围添加引号,特别是因为它包含空格;

Response.AddHeader("Content-Disposition", 
    string.Format("attachment; filename=\"{0}\"", downloadName));

附带说明一下,Response.End()还会刷新缓冲区,因此您Response.Flush()是多余的。

于 2013-03-17T07:39:16.367 回答
0

解决了这个问题。我正在使用 Ajax 从我的一个视图中调用此函数。这不起作用(我不确定为什么),但我认为这可能是因为我有多个控制器。调用它可以@HTML.ActionLink()正确显示提示。

于 2013-03-22T18:48:28.067 回答