我正在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或脚本需要进行一些调整以通知浏览器它必须下载文件?
提前感谢大家。
答案 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对象)。
大多数实现都将指定成功处理程序。
我不是,所以默认情况下,它只是将其放到控制台中。我希望这可以为问题提供一些帮助。编码愉快。