我刚刚在ASP.NET MVC 3中阅读了R0OR模板上的
this blog post。
简单地说,我只是没有得到它!
也就是说,我不明白为什么我们需要这个(相当的)复杂的代码来实现什么可以做的IMO更容易(和更整洁)@RenderPartial?
这是我不喜欢的:
>模板存储为Func< T,HelperResult>代表?
>该模板委托持久化在Controller ViewData(例如HttpContext.Current.Items)中
我从这个博客中读到的唯一的“好处”就是模板不需要单独的文件,这意味着你不需要重新编译。
但我不认为这是有效的论据。只要解决方案组织不受影响,额外的文件就可以了。
我喜欢使用@RenderPartial,因为我可以保持我的标记与主视图分开,我可以在内联(渲染时间)和jQuery(例如AJAX事件)中呈现这两者。
也许我在这里缺少一些东西,但是任何人都可以提供一些理由,为什么我们应该选择RenderPartial上的Razor Templating来创建可重复使用的内容?
解决方法
那么你应该问这个帖子的作者关于他介绍这种技术的动机。
这当然说明了剃须刀的可能性。是否应该使用它是一个不同的事情。我个人认为有一些不那么复杂的替代技术(我同意关于将Func存储在请求上下文中)。
>你已经提到了@RenderPartial。
>您还可以使用@helper语法(作为本地帮助器或全局帮助器)
>你可以编写一个html帮助程序(并使用TagBuilder来组合输出)
>你可以写一个小孩的动作
>你可以写一个模板的帮手
现在我看看上面的列表我认为MVC可能提供太多的选择:)
更新为了更好地说明内联模板如何可用,我写了一篇关于使用它们调用部分的博客文章,其默认代码为:Optional Razor Sections with Default Content。
你可以用它来写这样的东西:
@this.RenderSection("OptionalSection",@<div>Default Content</div>)