做在谷歌快速搜索,带来了相当多的成果,为this问题。
在JQuery中,您可以将'window.location'指向控制器中的操作方法,即返回FileResult。这会为你下载文件。
我建议您将消息返回给ajax调用,说明您的下载是否成功,然后您可以在前端设置某种文本以通知用户此过程不成功。
这是我将如何完成这一点。你可以调整它为你工作。这是一个控制器方法的例子。
[HttpGet]
public JsonResult ExportCollection()
{
//Build your excel file, and save it to disk somewhere on server.
//you can also save it in session, depending on size
//Build up response Messages based on success or not
//return json object with your file path
return Json(new { responseMessage = responseMessage }, JsonRequestBehavior.AllowGet);
}
public ActionResult Download(string fileName)
{
return File(model.FilePath, "application/vnd.ms-excel", fileName);
}
然后,使用JQuery和Ajax调用从客户端调用这些操作。
$(document).on("click", "#YourButton", function() {
var url = "/YourController/ExportCollection/"
$("#responseText").text("We're getting things ready. Please wait...");
$('#loadingImage').show();
$.ajax({
url: url,
type: "get",
success: function (responseMessage) {
patientCollectionExportSuccess(responseMessage);
}
});
})
//Function responsible for exporting
function patientCollectionExportSuccess(dataReceived) {
var respMessage = dataReceived.responseMessage;
if (respMessage != null) {
if (respMessage != "Error: Not Exported.") {
$("#responseText").text("Download completed.");
$('#loadingImage').hide();
//set window.location to redirect to FileResult, which will download file
window.location = '/PatientListingQuery/Download?fileName=' + respMessage ;
}
else {
$("#responseText").text("Download unsuccessful.");
$('#loadingImage').hide();
$("#responseText").text(dataReceived.responseMessage);
}
}
}
有没有其他的替代方法,而不是保存文件? – Dev
例如,您可以将文件保存在TempData中。但是,当用户因任何原因刷新页面时,我相信该文件将会消失。可能更好地保存到磁盘,并且一旦下载,您可以再次从磁盘移除文件。 –