【发布时间】:2018-09-04 16:41:35
【问题描述】:
我将 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 或脚本需要一些调整来通知浏览器它必须下载文件?
提前感谢大家。
【问题讨论】:
-
从操作中返回
FileResult?还是使用ActionAsPdf? -
在您的控制器中,您是否添加了
System.Net.Mine.ContentDisposition和Inline = false? -
啊,抱歉,刚刚注意到您通过 ajax 获取 PDF 数据。最简单的方法是通过锚点
<a>和target="_blank"来打开它 -
试试这个:
var contentDisposition = new System.Net.Mine.ContentDisposition { Inline = false }; response.AppendHeader("Content-Disposition", contentDisposition.ToString());- 不确定它是否对 ajax 有帮助。它建议浏览器不应该在浏览器窗口中显示下载。所以可能不是你想要的。 -
错字:System.Net.Mime
标签: c# jquery html asp.net-mvc rotativa