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。
我试过的
- 我已经查看了很多关于获取值的帖子 (example),这些帖子都需要访问 htmlHelper 对象,因此无法访问 ControllerContext。
- 我发现一些帖子 (example) 看起来与我想要完成的非常相似,但它们似乎需要访问 Model 对象,我不确定我是否可以得到。我真正可用的是 lambda 表达式中的数据。
我为文字墙道歉;我试图尽我所能打破它。在此先感谢您的任何建议!
当然,在输入所有这些之后,我发现了一个简单的解决方案:将视图中的模型作为参数传递给辅助函数。
免责声明
如果您发现以下内容有任何错误假设,请告诉我。我已经为此付出了相当多的努力,但如果有更好的方法,我很乐意把我所有的东西都扔掉。
精简版
我需要在不访问控制器上下文的情况下复制 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。
我试过的
- 我已经查看了很多关于获取值的帖子 (example),这些帖子都需要访问 htmlHelper 对象,因此无法访问 ControllerContext。
- 我发现一些帖子 (example) 看起来与我想要完成的非常相似,但它们似乎需要访问 Model 对象,我不确定我是否可以得到。我真正可用的是 lambda 表达式中的数据。
我为文字墙道歉;我试图尽我所能打破它。在此先感谢您的任何建议!
当然,在输入所有这些之后,我发现了一个简单的解决方案:将视图中的模型作为参数传递给辅助函数。