我查看了很多资源,以下内容应该可以正常工作,但是我的保存对话框永远不会显示(不是特定于浏览器):
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();
该文件肯定存在。我也尝试了以下内容:
使用Response.TransmitFile(FileName)
代替
退出Response.End()
退出Content-Length
标题
使用this.ControllerContext.HttpContext.Response
任何帮助都非常赞赏
答案 0 :(得分:2)
不确定这是您唯一的问题,但是Content-Disposition
标题is supposed to be a quoted-string
中的文件名,因此您需要在其周围添加引号,特别是因为它包含空格;
Response.AddHeader("Content-Disposition",
string.Format("attachment; filename=\"{0}\"", downloadName));
在旁注中,Response.End()
也会刷新缓冲区,因此Response.Flush()
是多余的。
答案 1 :(得分:0)
解决了这个问题。我正在使用Ajax从我的一个视图中调用此函数。这不起作用(我不知道为什么),但我认为这可能是因为我有多个控制器。从@HTML.ActionLink()
调用此方法可以正确显示。