我正在使用 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 或脚本需要一些调整来通知浏览器它必须下载文件?
提前谢谢大家。
我找到了解决方案。这并不优雅,但它有效。所以我不一定需要使用ajax来发出请求,也不需要为按钮提供功能。我有点确定这个问题与 JS 和/或 jQuery 有关。不过,有一种更简单的方法可以做到这一点。
我将我的 html 按钮更改为:
<a href="DescargarPDF/[email protected]" target="_blank" class="btn btn-secondary btn-info">PDF</a>
所以它看起来像一个按钮,但它实际上是我的控制器方法的链接。我还删除了该按钮的脚本,现在它会下载文件。不是有意的名字,但仍然如此。
谢谢大家。快乐编码。
更新
我一直在做同一个项目,我想我找到了为什么我的 PDF 文件被扔进控制台。
问题是,jQuery 发出请求,因此 jQuery 管理响应。有那么简单吗。如果您检查的官方文档的.post()
,你会看到以下内容:
成功回调函数传递返回的数据,根据响应的 MIME 类型,该数据将是 XML 根元素或文本字符串。它还传递响应的文本状态。
从 jQuery 1.5 开始,成功回调函数还传递了一个“jqXHR”对象(在 jQuery 1.4 中,它传递了 XMLHttpRequest 对象)。
大多数实现将指定一个成功处理程序。
而我不是,所以,默认情况下,它只是将它放到控制台。我希望这能给这个问题带来一些启发并有所帮助。快乐编码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句