无法在MVC4中使用Rotativa下载PDF文件

时间:2014-04-23 09:02:34

标签: asp.net asp.net-mvc asp.net-mvc-4 rotativa

我正在使用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上试过这个问题,这也是同样的问题!

非常感谢。

2 个答案:

答案 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
                 };
}