将PDF扔到浏览器控制台,而不下载

时间:2018-08-31 10:39:13

标签: c# jquery html asp.net-mvc rotativa

我正在Rotativa上运行generate a PDF file from a view,效果很好,但是现在在浏览器上,我将原始文件扔到了控制台上,没有下载对话框,没有警告,什么都没有。这是我的代码:

控制器

public ActionResult DescargarPDF (int itemId) {
        var presupuesto = ReglasNegocio.Fachada.Consultas.ObtenerPresupuesto(itemId);     
        return new Rotativa.PartialViewAsPdf("_PresupuestoFinal", presupuesto) {
            FileName = "Presupuesto_" + itemId + ".pdf",
            PageSize = Rotativa.Options.Size.A4
        };
    }

jQuery脚本:

$(".convertirPDF").on("click", function (id) {
    var itemId = $(this).data('itemid');
    Pdf(itemId);
});

function Pdf(itemid) {
    var id = itemid;

    $.ajax({
        method: "POST",
        url: 'DescargarPDF',
        data: { itemId: id },
        cache: false,
        async: true,
    });
};
HTML上的

按钮

<button class="convertirPDF btn btn-secondary btn-info" data-itemid="@item.Id">PDF</button>

我已经在控制器上尝试了几个代码(结果相同),因为脚本和视图似乎可以正常工作。但是,我怀疑,也许html或脚本需要进行一些调整以通知浏览器它必须下载文件?

提前感谢大家。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。它不优雅,但可以。 因此,我不必使用ajax来发出请求,也不必为按钮提供功能。我确定问题与JS和/或jQuery有关。不过,有一种更简单的方法可以做到这一点。

我将html按钮更改为:

<a href="DescargarPDF/?itemId=@item.Id" target="_blank" class="btn btn-secondary btn-info">PDF</a>

所以它看起来像一个按钮,但实际上是到我的控制器方法的链接。我还删除了该按钮的脚本,现在它下载了文件。

感谢大家。编码愉快。

更新

我一直在从事同一个项目,我想我发现了为什么我的PDF文件被扔到控制台中的原因。

问题是,jQuery发出请求,因此jQuery管理响应。就是这么简单。如果在official docs中检查.post(),则会看到以下内容:

  

成功回调函数将传递返回的数据,该数据将是XML根元素或文本字符串,具体取决于响应的MIME类型。它还会传递响应的文本状态。

     

从jQuery 1.5开始,成功回调函数还传递了一个“ jqXHR”对象(在jQuery 1.4中,它传递了XMLHttpRequest对象)。

     

大多数实现都将指定成功处理程序。

我不是,所以默认情况下,它只是将其放到控制台中。我希望这可以为问题提供一些帮助。编码愉快。