2

我有以下控制器,在那个控制器中我创建了会话来保存IENUMERABLE数据集

    [HttpPost]
    [ValidateInput(false)]
    public ActionResult Create_Brochure(IEnumerable<ProductsPropertiesVM> model)
    {

        IEnumerable<ProductsPropertiesVM> newmodel = model;

        IEnumerable<BrochureTemplateProperties> sample = model.Where.....

        Session["TemplateData"] = newmodel;

        return View(sample);
    }

编辑:

PrintIndexCreate_Brchure 视图页面具有指向同一类文件中调用方法的 href 链接

<a href="@Url.Action("PrintIndex", "Brochure")">Download ViewAsPdf</a>

这是PrintIndex方法

    public ActionResult PrintIndex()
    {
        return new Rotativa.ActionAsPdf("Create_Brochure_PDF") { FileName = "TestActionAsPdf.pdf" };
    }

我想在控制器方法中再次使用该会话列表数据集Create_Brochure_PDF,所以我在这里创建了该方法

    public ActionResult Create_Brochure_PDF()
    {
        IEnumerable<ProductsPropertiesVM> newmodel = Session["TemplateData"] as IEnumerable<ProductsPropertiesVM>;

        IEnumerable<BrochureTemplateProperties> samplePDF = newmodel.Where(....

        return View(samplePDF);
    }

但在上面的方法中,我得到了 nullIEnumerable<ProductsPropertiesVM> newmodel

编辑:

如果我解释整个场景

  1. Create_Brochure控制器方法有一个视图,
  2. 在该视图中,我有 href 链接将该Create_Brochure视图另存为 PDF
  3. 一旦我单击该 href 链接,我将调用PrintIndex方法,因此在该操作方法中再次调用Create_Brochure_PDF方法,因此我设置了 null 对象Create_Brochure_PDF
4

1 回答 1

1

前段时间我有同样的问题,所以我想出了ViewasPdf()Rotativa库中的解决方法

您可以在单击该 href 链接后直接调用,但您必须为此方法创建一个视图,该方法将生成为 PDF

所以这里的步骤

  1. 为您要生成为 PDF 的视图创建一个操作

    public ActionResult Create_Brochure_PDF()
    {
    
        IEnumerable<ProductsPropertiesVM> newmodel = Session["TemplateData"] as IEnumerable<ProductsPropertiesVM>;
    
        IEnumerable<BrochureTemplateProperties> samplePDF = newmodel.Where(.... 
    
        rerurn View();
    

    }

  2. 为该 Action 方法生成视图

  3. 将此行替换为方法rerurn View();中的以下行Create_Brochure_PDF()

return new Rotativa.ViewAsPdf("Create_Brochure_PDF") { FileName = "TestActionAsPdf.pdf" };

  1. 现在Create_Brochure_PDF()在 Create_Brochure 视图页面中调用如下方法

<a href="@Url.Action("Create_Brochure_PDF", "Brochure")">Download ViewAsPdf</a>

于 2015-11-08T10:23:21.123 回答