我一直在搜索SO和Google,了解可用于ASP.NET MVC的各种视图引擎,但是没有找到比视图引擎的简单高级描述更多的内容.
我不一定在寻找"最佳"或"最快",而是在各种情况下对主要参与者(例如默认的WebFormViewEngine,MvcContrib View Engines等)的优缺点进行实际比较.我认为这对确定从默认引擎切换是否对给定项目或开发组有利有用.
有没有人遇到这样的比较?
我有一个使用Razor作为其视图引擎的MVC3站点.我希望我的网站可以换肤.大多数可能的皮肤都足够相似,可以从共享的主布局中获得.
因此,我正在考虑这个设计:

但是,我希望能够RenderSection在底层调用_Common.cshtml,并让它渲染一个在顶层定义的部分,Detail.cshtml.这不起作用:RenderSection显然只渲染下一层定义的部分.
当然,我可以定义每个皮肤中的每个部分.例如,如果_Common需要调用RenderSection("hd")中定义的部分Detail,我只需将其放在每个部分中_Skin并且它可以工作:
@section hd {
@RenderSection("hd")
}
Run Code Online (Sandbox Code Playgroud)
这导致一些代码重复(因为每个皮肤现在必须具有相同的部分)并且通常感觉很乱.我还是Razor的新手,似乎我可能会遗漏一些明显的东西.
调试时,我可以在WebViewPage.SectionWritersStack中看到已定义部分的完整列表.如果我可以告诉RenderSection在放弃之前查看整个列表,它会找到我需要的部分.唉,SectionWritersStack是非公开的.
或者,如果我可以访问布局页面的层次结构并尝试在每个不同的上下文中执行RenderSection,我可以找到我需要的部分.我可能错过了什么,但我认为没有办法做到这一点.
除了我已经概述的方法之外,还有一些方法可以实现这个目标吗?
我正在寻找一个.net模板引擎 - 简单,轻量,稳定,没有太多的依赖.我目前所需要的只是创建模板化的纯文本和HTML电子邮件.谁能给我一个好的推荐?
如果它有帮助 - 比如Java的Freemarker或Velocity库.
[更新]感谢迄今为止的答案 - 非常感谢.当你使用这些库时,我真的很喜欢推荐或战争故事.似乎是在不依次尝试每个决策的情况下做出决定的最佳方式.
我开始学习ASP.NET MVC3.
因此,在阅读在线和书籍教程时,我经常遇到这个术语"视图引擎".我不知道它是什么.
它实际上做了什么?
为什么这对我来说很重要?
阅读Scott Guthrie的博客文章,了解ASP.NET MVC 的新Razor视图引擎,并阅读这个问题,比较可用的视图引擎.
Razor似乎解决了默认视图引擎的大多数问题.作为开发人员,哪些功能差异会使其成为一个引人注目的选择?缺少哪些功能会阻止您使用它?
我正在寻找一种用较少的代码行编写以下代码的方法(可能是5).我想我可以做与选定类相同的事情,但这种剃刀语法看起来并不漂亮.
<ul>
@foreach (var mi in Model.MenuItems) {
<li@(mi.Selected?" class=\"selected\"":null)>
@if (string.IsNullOrEmpty(mi.Title)) {
<a href="@mi.Href">@mi.Text</a>
} else {
<a href="@mi.Href" title="@mi.Title">@mi.Text</a>
}
</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud) 使用ASP.NET MVC的默认视图引擎,您可以声明服务器端注释,如下所示:
<%-- This is a comment --%>
Run Code Online (Sandbox Code Playgroud)
此注释仅在服务器端可见,不会发送到客户端.我如何使用Razor视图引擎做同样的事情?
我不太确定这是如何工作的...试图找到文档.
在我现有的应用程序中,我有两种不同的方式在我的视图中呈现字符串
<%: model.something %>
<!-- or -->
<%= model.something %>
Run Code Online (Sandbox Code Playgroud)
第一个是html编码,第二个不是.
Razor有类似的东西吗?我只能找到这个,这是编码版本.
@model.something
Run Code Online (Sandbox Code Playgroud) 我想根据当前的UI文化在运行时更改视图位置.如何使用默认Web窗体视图引擎实现此目的?
基本上我想知道如何与实现WebFormViewEngine的东西是什么风俗IDescriptorFilter的星火.
是否有其他视图引擎可以让我对视图位置进行运行时控制?
编辑:我的网址应该如下{lang}/{controller}/{action}/{id}.我不需要语言相关的控制器和视图本地化的资源.但是,在某些语言中,很少有观点会有所不同.所以我需要告诉视图引擎首先查看特定于语言的文件夹.
viewengine ×10
asp.net-mvc ×6
razor ×6
asp.net ×2
c# ×2
.net ×1
express ×1
html-encode ×1
node.js ×1
pug ×1
templates ×1