哪一种是将视图呈现给控制器外部字符串的首选方式?

本文关键字:字符串 方式 外部 控制器 视图 哪一种 | 更新日期: 2023-09-27 18:11:17

我想使用MVC的DisplayTemplates来格式化作为JSON ajax响应一部分的HTML。

HTML作为AjaxJsonResult类(我的)的一部分返回,这是在控制器之外创建的,所以我不想使用简单的,基于控制器的,RenderViewToString()方法,否则我更喜欢。

我已经找到了4种可能的方法来做这件事,但没有一种让我满意。如果有的话,我也不知道哪一个是最好的。在我看来,它们似乎过于复杂(1,4),过于难闻(2),或者开销很大(3)。

谁能建议这些可能是最有效/最好的使用?我没有足够的经验来权衡每一个的利弊。


1。RazorEngine

我曾计划使用RazorEngine -当我研究它时,它似乎足够简单:

Razor.Parse("DisplayTemplates/MyModel.cshtml", model)

但是这种方法已经过时了。当我看文档时,似乎有很多"突破性的变化"。我正在努力弄清楚我应该如何实现,我应该如何缓存,何时从磁盘读取,等等。


2。使用RenderViewToString() -传入控制器作为参数

我真的不想这样做,因为把它传递到其他代码链上看起来很混乱。


3。创建假控制器

一个选项是创建一个FakeController(这个问题的公认答案),但这似乎有点过头了。我不记得我在哪里看到的,但我在某处读到过它对性能不太好。


4。渲染类,带有虚拟路径提供程序

这是我在BuildStarted上看到的另一种方法。再说一次,我对这个问题也不太了解,所以不能说这种方法的利弊。

哪一种是将视图呈现给控制器外部字符串的首选方式?

好吧,无论你做什么,一个普遍的原则是尽量减少你的代码。剃刀就是这么做的。它被设计为与MVC一起工作,如果你使用强类型,它会给你更少的代码和更少的渲染。我建议用剃刀法。

第一个是我最好的选择。其他的似乎有点过头了。这是我个人的观点,我认为这里没有绝对的最佳实践

相关文章: