做在谷歌快速搜索,帶來了相當多的成果,爲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中。但是,當用戶因任何原因刷新頁面時,我相信該文件將會消失。可能更好地保存到磁盤,並且一旦下載,您可以再次從磁盤移除文件。 –