微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rotativa BuildFile 未命中操作方法

如何解决Rotativa BuildFile 未命中操作方法

我的 Controller 类中有两个操作方法

  1. DetailsAll:获取一些数据并在视图中显示
  2. SaveAsPDF:在应将 DetailsAll 视图另存为 pdf 的 DetailsAll.cshtml 的 windows.load 上调用

我的问题是 SaveAsPDF Action 方法在这里,我尝试使用 Rotativa ActionAsPdf 和随后的 BuildFile 方法生成和保存 PDF。但是,在执行“BuildFile”这一行时,它没有在我的 DetailsAll Action 方法中遇到断点,从而导致 PDF 生成为空白。

你能帮我哪里出错吗?

    [HttpGet]
    public ActionResult DetailsAll()
    {
        var selectionBuilder = builderFactory.GetGeocodeReportSelectionviewmodelBuilder();
        var companyList = selectionBuilder.Build();

        List<GeocodeReportviewmodel> viewmodel = new List<GeocodeReportviewmodel>();
        foreach(SelectListItem record in companyList.Companies)
        {
            var builder = builderFactory.GetGeocodeReportviewmodelBuilder(int.Parse(record.Value));
            viewmodel.Add(builder.Build());
        }
        var model = new AllGeocodeReportviewmodel
        {
            GeocodeReports = viewmodel
        };
        return View(model);
    }

    [HttpGet]
    public string SaveAsPDF()
    {
        var report = new ActionAsPdf("DetailsAll")
        {
            FileName = "OEM_GeocodeReport_" + System.DateTime.Now.ToString("MMYY") + ".pdf",PageSize = Size.A4,PageOrientation = Orientation.Landscape,PageMargins = { Left = 1,Right = 1 }
        };
        byte[] pdf = report.BuildFile(ControllerContext);
        System.IO.File.WriteallBytes("C:\\" + report.FileName,pdf);
        return "true";
    }


   

解决方法

经过广泛搜索,终于找到了这个问题。我需要将身份验证 cookie 与 BuildFile 请求一起发送才能使其工作。添加了以下代码,现在可以正确生成 PDF:

 public void SaveAsPDF()
    {
        var cookies = Request.Cookies.AllKeys.ToDictionary(k => k,k => Request.Cookies[k].Value);
        var report = new ActionAsPdf("DetailsAll")
        {
            FileName = "OEM_GeocodeReport_" + System.DateTime.Now.ToString("MMyy") + ".pdf",PageSize = Size.A4,PageOrientation = Orientation.Portrait,PageMargins = { Left = 3,Right = 3 },FormsAuthenticationCookieName = System.Web.Security.FormsAuthentication.FormsCookieName,Cookies = cookies
        };
        byte[] pdf = report.BuildFile(ControllerContext);
        System.IO.File.WriteAllBytes("C:\\" + report.FileName,pdf);            
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。