【问题标题】:ASP.NET Rotativa Generate PDF from view from another controllerASP.NET Rotativa 从另一个控制器的视图生成 PDF
【发布时间】:2019-09-10 16:46:44
【问题描述】:

我有两个控制器,1 个是 api 控制器,另一个是视图控制器,我要做的是从 api 控制器从视图控制器中的视图生成 PDF...这可能吗以及如何我会这样做吗?

API 控制器 - 这是我要生成 PDF 的地方

public byte[] getReportsPDF(string community, string procedure)
{
            byte[] pdfBytes = new byte[] { };

            System.Web.Mvc.ControllerContext context = new System.Web.Mvc.ControllerContext();

            if(procedure == "GetProductionTasks")
            {
                var actionPDF = new Rotativa.ActionAsPdf("RedBluePDF", new { community = community, procedure = procedure })
            {
                    PageSize = Size.A4,
                    PageOrientation = Rotativa.Options.Orientation.Landscape,
                    PageMargins = { Left = 1, Right = 1 }
                };
                pdfBytes = actionPDF.BuildFile(context);
            }

            return pdfBytes;
}

View Controller - 这是我要生成的视图。

public ActionResult RedBluePDF(string community, string procedure)
{
    return View();            
}

【问题讨论】:

  • 理想情况下,您不应从视图控制器调用 API 控制器。您可以做的是有一个单独的 PDF 生成类并调用从视图和 API 控制器生成的 PDF。检查this link
  • 嘿,我正在尝试从 API 控制器调用视图控制器
  • 如果隔离 GeneratePDF 方法,则可以从 api 调用它。

标签: c# asp.net asp.net-mvc rotativa


【解决方案1】:

试了很久,终于解决了:

var controller = DependencyResolver.Current.GetService<ViewController>();
RouteData route = new RouteData();
route.Values.Add("action", "RedBluePDF");
route.Values.Add("controller", "ApiController");
ControllerContext newContext = new ControllerContext(new HttpContextWrapper(System.Web.HttpContext.Current), route, controller);

controller.ControllerContext = newContext;
controller.RedBluePDF(community, procedure);

我一直在尝试:

var controller = DependencyResolver.Current.GetService<ControllerB>();
controller.ControllerContext = new ControllerContext(this.Request.RequestContext, controller);

但这会给我错误的 pdf,因为它将使用您当前的控制器(在本例中为 API 控制器)来调用 ActionAsPdf()

感谢this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    相关资源
    最近更新 更多