【问题标题】:Antaris RazorEngine - Helper Lambda ExpressionsAntaris RazorEngine - 辅助 Lambda 表达式
【发布时间】:2016-03-04 21:24:51
【问题描述】:

免责声明

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


短版

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


背景

我正在尝试从 Razor (.cshtml) 文件生成 PDF 文档。我以前使用过Rotativa(基于wkhtml),它似乎工作得很好。但是,我有时需要生成数百个文档,并且我想异步执行此操作以节省时间。不幸的是,似乎任何异步都无法访问 Rotativa 所需的控制器上下文。此外,研究表明 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 表达式中的数据。

我为文字墙道歉;我试图尽可能地打破它。提前感谢您的任何建议!

【问题讨论】:

    标签: c# asp.net-mvc razor lambda razorengine


    【解决方案1】:

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

    【讨论】:

    • 你有这个修复的例子吗?我在同一条船上。
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 2019-06-26
    相关资源
    最近更新 更多