コントローラー アクション内から、別のアクションを呼び出し、呼び出されたアクションに適用可能なものActionFilter
も起動する必要があります。結果の HTML を PDF ジェネレーターに渡すため、これを行う必要があります。
これは私が現在持っているものですが、呼び出されませんSomeActionFilter.OnActionExecuting()
[SomeActionFilter]
public class FooController : Controller
{
public ActionResult ActionOne()
{
return View();
}
public ActionResult ActionTwo()
{
// This is how I'm rendering the view to HTML at the moment
var controllerDescriptor = new ReflectedControllerDescriptor(ControllerContext.Controller.GetType());
var actionDescriptor = controllerDescriptor.FindAction(ControllerContext, "ActionOne");
var result = actionDescriptor.Execute(ControllerContext, new Dictionary<string, object>()) as ViewResult;
ViewEngineResult viewEngineResult = ViewEngines.Engines.FindView(controllerContext, viewName, null);
var builder = new StringBuilder();
using (var writer = new StringWriter(builder))
{
var context = new ViewContext(controllerContext, viewEngineResult.View, result.ViewData, result.TempData, writer);
viewEngineResult.View.Render(context, writer);
}
string actionOneAsHtml = builder.ToString();
// From here on I'm just using the rendered HTML to generate the PDF ...
byte[] pdf = _acrobatExportService.ExportFromUrl(new AcrobatExportModel
{
Html = actionOneAsHtml
});
return File(pdf, "application/pdf", "export.pdf");
}
}
HTTP を使用してアクションを呼び出すことができることはわかっていますが、それは冗長に思えます。