如何在MVC应用程序中使用ajax调用从控制器返回pdf文档

时间:2013-09-06 16:32:49

标签: ajax asp.net-mvc jquery

我有一个@ Html.Action链接,目前可用于从控制器返回用户pdf文档。我希望能够使用ajax调用来执行相同的功能,但我仍然坚持如何,甚至可以做到这一点。我尝试了几种不同的迭代,但我从来没有从浏览器窗口下载pdf。以下是我到目前为止的情况:

$('#Button1').click(function () {
    var poNum = "51970";
    $.ajax({
        type: "GET",
        data: "id= " + poNum,
        url: '@Url.Action("PoReport", new { controller = "LogisticsTools"})'

        });
  });

我可以从Chrome开发者工具的标题窗口中复制请求网址,然后将其粘贴到新页面中,然后下载pdf。我也可以在Response窗口中看到pdf代码,但是单击按钮时它不会被下载。我错过了什么?

2 个答案:

答案 0 :(得分:2)

你不想这样做。将URL放在锚标记中,让浏览器完成剩下的工作。如果浏览器无法识别文档类型或者配置为强制文件下载,则文件将按预期下载(即用户将看到下载对话框)。如果文件被识别,可以在浏览器中打开,并且浏览器配置为打开文件,该文件将在浏览器中打开。

<a href='@Url.Action("PoReport", new { controller = "LogisticsTools"})'
   title="Click to Download/Open">
    Download
</a>

答案 1 :(得分:0)

使用ajax请求到服务器时无法下载PDF文件。所以不应该使用html actionlink。例如

@Html.ActionLink("Convert Data into PDF", "PDFView", null, new { @class= "btn btn-info" });

上面的代码将生成一个链接按钮,您可以访问控制器的Action Method。您也可以使用任何技术从控制器返回PDF文件,例如,您可以使用 FileResult 类返回PDF文件。