声明
如果您发现以下任何内容有任何错误的假设,请告知我们。我已经做了相当多的工作,但如果有更好的方法,我很乐意抛出我所拥有的东西。
短版
我需要复制MVC @Html.DisplayFor()
函数的功能,而无需访问Controller Context。
背景
我试图从Razor(.cshtml)文件生成PDF文档。我以前使用的是Rotativa(基于wkhtml),它似乎工作得相当好。但是,我有时需要生成数百个文档,我想异步这样做以节省时间。不幸的是,似乎异步的任何东西都无法访问Rotativa所需的Controller上下文。此外,研究表明wkhtml一般不能异步运行。
当前尝试的解决方案
所以,现在我尝试使用Antaris RazorEngine将Razor视图渲染为HTML字符串,而不使用使用控制器上下文。然后,我将该HTML提供给iTextSharp来制作PDF。我相信这应该能够异步运行(如果有人知道相反的情况,请纠正我)。
解决方案的问题
我们的Razor视图严重依赖HtmlHelper对象(需要访问Controller Context)来执行@Html.LabelFor()
或@Html.DisplayFor()
之类的操作。我相信我已经能够将LabelFor功能复制为独立的帮助方法。不幸的是,DisplayFor方法更具挑战性。使用LabelFor,我只需要获取有关通过lambda表达式传入的对象属性的信息。相比之下,DisplayFor需要获取通过lambda表达式传入的对象的值。
我尝试过的事情
我为文字墙道歉;我试图尽我所能打破它。提前感谢任何建议!
答案 0 :(得分:0)
当然在输入所有内容之后,我发现了一个简单的解决方案:将模型从视图中作为参数传递给辅助函数。