我在vs 2010中创建MVC 3应用程序。我尝试在filder中下载文件。
这是我在MVC中的行动。请看我的代码。
//[HttpPost]
public FileResult Download(string url, string cnt)
{
if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(cnt))
{
return File(url, cnt);
}
else
{
return null;
}
}
<input type="button" id="@(Model.ControlID)_bio_view" class="changepasswordbutton" value="View" />
我在.cshtml文件中创建了一个jQuery函数
function ViewFile(url, cnt) {
$.post('@(Url.Action("Download"))?url=' + url + '&cnt=' + cnt)
}
$('#@(Model.ControlID)_bio_view').click(function (e) {
ViewFile($('#bio_file_url').val(), $('#bio_file_url').attr("cnttype"));
});
单击“下载”按钮时,此功能被正确触发。 但是没有提示文件下载窗口。
请帮忙。
答案 0 :(得分:3)
不,您无法使用AJAX请求下载文件。您需要将浏览器重定向到目标网址,而不是发送AJAX请求:
function ViewFile(url, cnt) {
window.location.href = '@(Url.Action("Download"))?' +
'url=' + encodeURIComponent(url) +
'&cnt=' + encodeURIComponent(cnt);
}
还要记住,File
函数需要第一个参数作为文件的绝对物理路径,例如:
public ActionResult Download(string url, string cnt)
{
if (!string.IsNullOrEmpty(url) && !string.IsNullOrEmpty(cnt) && File.Exists(url))
{
return File(url, cnt);
}
return HttpNotFound();
}
另外,如果要提示下载文件,则需要指定文件名(File函数的第3个参数):
return File(@"c:\reports\foo.pdf", "application/pdf", "foo.pdf");