Antaris RazorEngine - 辅助 Lambda 表达式

Antaris RazorEngine - Helper Lambda Expressions

免责声明

如果您发现以下内容有任何错误假设,请告诉我。我已经为此付出了相当多的努力,但如果有更好的方法,我很乐意把我所有的东西都扔掉。


精简版

我需要在不访问控制器上下文的情况下复制 MVC 的 @Html.DisplayFor() 函数的功能。


背景

我正在尝试从 Razor (.cshtml) 文件生成 PDF 文档。我以前使用的是 Rotativa(基于 wkhtml),它似乎工作得很好。但是,我有时需要生成数百个文档,我想异步执行此操作以节省时间。不幸的是,似乎任何异步都无法访问 Rotativa 所需的 Controller 上下文。此外,研究表明 wkhtml 通常不能 运行 异步。


当前尝试的解决方案

所以,现在我正在尝试使用 Antaris RazorEngine 将 Razor 视图呈现为 HTML 字符串 而无需 使用控制器上下文。然后,我会将 HTML 馈送到 iTextSharp 中以制作 PDF。我相信这应该能够 运行 异步(如果有人知道相反的事情,请纠正我)。


解决方案的问题

我们的 Razor 视图严重依赖 HtmlHelper 对象(需要访问控制器上下文)来执行 @Html.LabelFor()@Html.DisplayFor() 等操作。我相信我已经能够将 LabelFor 功能复制为独立的辅助方法。不幸的是,事实证明 DisplayFor 方法更具挑战性。使用 LabelFor,我只需要获取有关通过 lambda 表达式传入的对象的属性的信息。相比之下,DisplayFor需要得到通过lambda表达式传入的对象的value


我试过的

我为文字墙道歉;我试图尽我所能打破它。在此先感谢您的任何建议!

当然,在输入所有这些之后,我发现了一个简单的解决方案:将视图中的模型作为参数传递给辅助函数。