ASP.NET MVC 3 Razor模板VS RenderPartial

RPM*_*984 23 asp.net-mvc asp.net-mvc-templates razor asp.net-mvc-3

我刚刚在ASP.NET MVC 3中阅读了关于Razor Templating的博客文章.

简单地说,我只是不明白!

也就是说,我不明白为什么我们需要这个(相当)复杂的代码来实现IMO更容易(和更整洁)的工作@RenderPartial

这是我不喜欢的:

  1. 模板存储为Func<T,HelperResult>代理?
  2. 该模板委托持久存储在Controller ViewData中(例如HttpContext.Current.Items)

我从博客中读到的唯一"好处"是模板不需要单独的文件,这意味着您不需要重新编译等.

但我不认为这是一个有效的论点.只要解决方案组织没有受到损害,额外的文件就可以了.

我更喜欢使用@RenderPartial,因为我可以保持我的标记与主视图分开,并且我可以使用内联(渲染时间)和jQuery(例如AJAX事件)来渲染它.

也许我在这里遗漏了一些东西,但是有人可以说明为什么我们应该选择Razor Templating over RenderPartial来创建可重复使用的内容吗?

mar*_*ind 19

那么,你应该向该帖子的作者询问他提出这种技术的动机.

它无疑说明了Razor的可能性.你是否应该使用它是另一回事.我个人认为有一些不太复杂的替代技术(我同意你关于存储Func请求上下文内容的观点).

  • 还有@RenderPartial,你已经提到.
  • 您还可以使用@helper语法(作为本地帮助程序或全局帮助程序)
  • 你可以编写一个html帮助器(TagBuilder用于组装输出)
  • 你可以写一个儿童动作
  • 你可以写一个模板化的助手

现在我看看上面的列表,我认为MVC可能提供了太多的选择:)

更新为了更好地说明内联模板如何有用,我写了一篇关于使用它们来调用默认代码部分的博客文章:带有默认内容的可选Razor部分.

你可以用它来写这样的东西:

@this.RenderSection("OptionalSection", @<div>Default Content</div>) 
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我们(MVC团队)没有提供"Razor模板".这只是Imran写的博客文章.我们并不是说这就是你应该编写应用程序的方式.它恰好可以这样做(因为Razor的工作方式). (2认同)