我有 FileResult 控制器操作,在某些情况下可能需要几分钟才能运行。我想为我们的用户提供操作正在运行的视觉指示,例如消息、微调器或进度条。问题是,我很难弄清楚如何在前端“检测” Action 已经完成。
我一直在玩弄对 FileResult Action 的 Ajax 调用,但这不起作用,因为 Ajax 无法将文件返回到浏览器。我还查看了异步操作和任务,但看起来 FileResult 不支持“await”关键字,我认为这是必要的。
在这一点上,我不知道下一步该尝试什么,并且对想法/想法非常开放。
编辑:
我按照bobek的建议进行了这项工作。基本上,我将 PDF 文件保存到磁盘,并将文件路径作为 ActionResult Content(fullFilePath) 返回。然后,在我的页面上,我使用类似这样的东西在 Action 执行时显示一个小的微调器 gif,然后在它完成后显示一个指向文件的链接。
var img = $("img#reportLoadingIcon");
var link = $('a#exportedFileLink');
link.hide();
img.show();
$.ajax({
url: url,
success: function (result) {
link.attr({target: '_blank', href: result});
link.show();
img.hide();
}
});