从Ajax调用控制器操作时,无法下载生成的PDF

时间:2018-11-16 13:24:44

标签: jquery asp.net ajax asp.net-mvc-4 asp.net-core

我正在从控制器返回FilestreamResult 我同时尝试了jquery和ajax,但无法成功从控制器下载pdf / xlsx文件。

控制器:

    var filestream = new FileStream(pdfoutputpath + ".pdf", FileMode.Open);
                return new FileStreamResult(filestream, "application/pdf");

使用jquery查看代码:

function downloadpdffile(id) {
                $(".popup-overlay, .popup-content").removeClass("active");
                var url = "/WorkInstructions/WorkinstructionDownload";
                $.get(url, { id: id, fileformat: 2 }, function () {

                });
            }

使用Ajax:

 function downloadpdffile(id) {
                $(".popup-overlay, .popup-content").removeClass("active");
                $.ajax({
                    url: "/WorkInstructions/WorkinstructionDownload",
                    cache: false,
                    type: "GET",
                    data: { id: id, fileformat: 2 },
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    success: function () {

                    }

                });

2 个答案:

答案 0 :(得分:0)

尝试将其放在您的ajax调用的success函数中:

success: function(){
    window.location = '@Url.Action("WorkinstructionDownload", "WorkInstructions", new { id = id, fileformat = 2})';
}

尽管我不认为ajax在这里没有提供任何价值,除非我遗漏了一些东西。您可以轻松地获取我上面发布的success函数的内容,并将其完全放在ajax调用之外(并删除ajax调用)。或者,您可以仅执行以下操作并完全删除脚本:

<a href="@Url.Action("WorkinstructionDownload", "WorkInstructions", new { id = id, fileformat = 2 })">Download Form</a>

答案 1 :(得分:0)

如果控制器没有问题,则可以使用window.open函数来完成任务。我在项目中使用了相同的技术。

var downloadURL='@Url.Action("WorkinstructionDownload", "WorkInstructions", new { id = id, fileformat = 2})'
window.open(downloadURL)