设置应用程序以在asp.net MVC中下载文件 - 从下载返回时没有任何事情发生

时间:2013-12-10 16:48:51

标签: c# asp.net-mvc

我意识到之前已经问过这个问题的变化。我找到的最佳答案是

File download in Asp.Net MVC 2

但是试图遵循这些指示并没有为我解决问题。

长话短说,文件正在被正确检索,名称,路径和mime类型都是正确的,并且不会抛出任何错误。客户端的javascript也不会抛出任何错误。

获取文件的C#代码如下所示:

[HttpPost]
public FileResult DownloadFile(int fileId)
{
    ... get the file and file info
    return File(fileBytes, fileMimeType, fileName);
}

javascript看起来像这样:

... set up for post here
$.post(settings.actions.downloadFile, {fileId: fileIdVar});

正如我所说的那样,帖子会回来,没有任何反应。

我尝试将帖子更改为get,结果是一样的。

我已经尝试设置一个回调函数,在下载返回时将document.location.href设置为一些随机url,但这只是将我的浏览器带到我指定的页面。根据我提供的链接中的解释,我无法理解

“...使用document.location.href = ...告诉浏览器转到url下载文件。它会看到内容处置标题,并将其显示为下载而不是页面......“

我应该指出我的浏览器。 document.location.href不接受数据,因此我不能单独使用它,并且使用post而不使用document.location.href也不会返回任何内容。

我可能做错了什么?

非常感谢响应者的时间!

1 个答案:

答案 0 :(得分:1)

就像您链接的帖子中的答案所说,您无法通过AJAX下载文件。

要设置位置,请更改操作以响应GET请求,并将文件ID添加到查询字符串或设置处理它的路由。此外,您可能已经在执行此操作,但您需要确保将Content-Dispostion标头值设置为attachment

window.location.href = settings.action.downloadFile + "?fileId=" + fileIdVar

由于您使用的是jQuery,因此可以使用$.param为您构建参数。

您还可以查看plugin以提供“类似AJAX”的体验。