我知道使用普通调用而不是AJAX调用似乎更好但是出于某种原因,即在下载期间出现问题时在模态对话框上显示错误消息,我需要通过在MVC5项目中使用AJAX调用来下载文件。以下是经过多次尝试后我最终做的事情:
查看:
<a href="javascript:downloadFile()">Download</a>
function downloadFile() {
$.ajax({
type: 'POST',
url: '/Experiment/GetFile',
data: '{id:' + 8 + '}', //For test purpose I used static id
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (returnValue) {
window.location = '/Experiment/GetFile?id=' + returnValue;
}
});
};
控制器:
在Controller中,我有一个类似的方法,但如果我应该为AJAX Post和成功方法做同样的方法,我真的很困惑。
[HttpPost]
public ActionResult GetFile(int id)
{
var dataContext = repository.FileAttachments.FirstOrDefault(m => m.Id == id);
if (dataContext == null)
{
return Json(new { success = true, returnValue = "8" });
}
else
{
return Json(new { success = false, message= "Error..." }, JsonRequestBehavior.AllowGet);
}
}
在ASP.NET MVC5中使用AJAX调用是否有智能方法来执行此dosnload操作?
答案 0 :(得分:0)
您需要返回文件名或文件路径 示例“/file/download.doc” 然后你需要编辑视图页面,如下面的
<a href="javascript:downloadFile()">Download</a>
<a href="" id="todownload" download>
function downloadFile() {
$.ajax({ type: 'POST', url: '/Experiment/GetFile', data: '{id:' + 8 + '}', //For test purpose I used static id
contentType: 'application/json; charset=utf-8', dataType: 'json',
success: function (returnValue)
$("#todownload").attr('href',returnValue);
$("#todownload").click();
}
});
};