0

我有 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();
    }
});
4

1 回答 1

0

您可以使其成为通过 AJAX 调用的常规 POST 操作,而不是返回文件,您可以返回文件路径并将用户重定向到该路径。

于 2014-02-04T22:39:40.733 回答