我正在使用Rotativa将Razor视图转换为PDF。
PDF文件未下载。
我可以在Fiddler中看到它,但浏览器没有提示下载 - 我已经尝试过IE和Chrome。
我还尝试使用this question here.中的解决方案将文件下载到物理路径,但由于系统无法访问该文件夹(访问被拒绝),因此无法正常工作。
这是我的代码:
public ActionResult Index()
{
var model = new CustomerDashboardVM();
return View("Index", model);
}
public ActionResult print(int voucherID)
{
var pdf = new ActionAsPdf("Index", new { voucherID}) { FileName = "testInvoice.pdf", PageSize = Rotativa.Options.Size.A4};
// RotativaHelper.SaveHttpResponseAsFile("http://localhost:65425/BlankDashboard", Server.MapPath("~\\PdfDownloads"));
return pdf;
}
我想知道为什么会发生这种情况 - 我点击按钮,它调用print ActionResult方法 - 没有错误消息(我在try和catch块中包装了这个)。我在同事PC上试过这个问题,这也是同样的问题!
非常感谢。
答案 0 :(得分:1)
问题是我通过Ajax帖子在按钮点击事件上调用了ActionResult print()
方法。这显然不起作用。
如果用一个链接替换该按钮,它应该有效,该链接的URL中包含print()方法;即,只是mvc链接工作的方式..
答案 1 :(得分:1)
好的,我弄错了。您尚未在Index方法中传递参数名称 voucherID 。
所以现在你的代码看起来像这样:
public ActionResult Index(int voucherID) // Here you have to pass parameter
{
var model = new CustomerDashboardVM(voucherID);
return View("Index", model);
}
和 Print()方法如下所示 -
public ActionResult Print(int voucherID)
{
return new ActionAsPdf(
"Index",
new { voucherID = voucherID })
{
FileName = "testInvoice.pdf",
PageSize = Rotativa.Options.Size.A4
};
}