为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
森林海 2021-12-25 16:43:02
我正在使用 Rotativa从视图生成 PDF 文件,效果很好,但现在在浏览器上,我得到了控制台抛出的原始文件,没有下载对话框,没有警告,什么都没有。这是我的代码:控制器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 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

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

我将我的 html 按钮更改为:

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

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

谢谢大家。快乐编码。

更新

我一直在做同一个项目,我想我找到了为什么我的 PDF 文件被扔进控制台。

问题是,jQuery 发出请求,因此 jQuery 管理响应。有那么简单吗。如果您检查的官方文档.post(),你会看到以下内容:

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

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

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

而我不是,所以,默认情况下,它只是将它放到控制台。我希望这能对问题有所了解并有所帮助。快乐编码。


查看完整回答
反对 回复 2021-12-25
  • 1 回答
  • 0 关注
  • 184 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号