asp.net 视图引擎归类
1. ASPX View Engine
第一个也是我们最熟悉的---aspx,相信做过WebForm开发对Aspx都比较了解:

小示例:
<%@ Control Inherits="System.Web.Mvc.ViewPage<IEnumerable<Product>>" %>
<% if(model.Any()) { %>
<ul>
<% foreach(var p in model){%>
<li><%=p.Name%></li>
<%}%>
</ul>
<%}else{%>
<p>No products available</p>
<%}%>
设计目标:
一个用于呈现Web Froms页面的输出的视图引擎。
优点:
•与ASP.NET MVC紧密集成
•对于以往ASP.NET开发人员有更好体验
•智能感应
•能选择其它语言的 CodeDom provider (例如: C#, VB.NET, F#, Boo, Nemerle)
•立即编译或预编译的views
缺点:
•在Asp.net MVC中容易与经典的Asp.net模式混淆起来,并且Asp.net MVC已不再支持它们。 (例如: ViewState PostBack)
•能有助于反模式的"标签团"
•智能感应强迫样式总是不在内联的代码块。
•设计简单模板时会凌乱。
2. Razor View
在Asp.net MVC 3 版本引入的, 可以支持UnitTest,也容易上手。

优点:
•结构紧凑,表达式流畅
•易于学习
•是不是一门新的语言
•具有很好的智能感知
•可以单元测试
•无处不在集成于ASP.NET MVC
缺点:
•创建一个稍微轻量级的“标签团”问题。服务器端标签实际上提供了围绕服务器的结构代码和非服务器端代码,Razor混淆HTML和服务器端代码,纯HTML和JS的开发具有挑战性(看具体的例子#1),你最终不得不“escape”的HTML和 / 或JavaScript标签 在某些常见的情况。
•封装可重用差:这是不切实际的调用Razor模板就好像它是一个普通的方法 - 在实践中Razor可以调用的代码,但反之则不然,它可以鼓励混合代码和呈现内容。
•语法是面向HTML生成非HTML的内容可能会非常棘手。尽管这样,Razor的数据模型实际上只是字符串串联,语法和嵌套错误,既不是静态或动态检测,虽然VS.NET设计时帮助减轻这个有确点。可维护性和可重构性也受限于此。
示例代码#1
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
3. Hasic
Hasic 是一个用VB.NET’s XML literals的Asp.net MVC 引擎
优点:
•编译时检查有效的XML
•语法着色
•完整的IntelliSense
•编译视图
•可扩展性使用常规的CLR类,函数等
•无缝的组合性和操纵,即使它是普通的VB.NET代码
•可单元测试
缺点:
•性能:构建整个DOM,然后将它发送给客户端。
例子:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
了解更多
4. Bellevue
Bellevue 是一个Asp.net MVC框架的开源模板原形,以HTML为其核心没有其它更多的语法。
• 遵循HTML一类的语言,而不是把它当作“只是文本”。
• 不要惹我的HTML!从HTML的数据绑定的代码应该是分离的。
• 执行严格的模型 - 视图分离
了解更多
5. Spark View Engine
另一个有趣的ASP.NET MVC与Castle项目MonoRail框架的View engine
设计目标:
理念是允许的HTML占主导地位的流和代码,以适应无缝。
优点:
•产生更可读的模板
•C#智能感知(VS2008没有ReSharper的)
•SparkSense插件在VS2010(与ReSharper的)
•提供一个强大的绑定功能,以摆脱你的Views中的所有代码,并允许您轻松地创造你自己的HTML标签
缺点:
•没有明确的模板逻辑的分离,从literal标记(这可以减轻命名空间前缀)
示例:
<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
<li each="var p in products">${p.Name}</li>
</ul>
<else>
<p>No products available</p>
</else>
<Form style="">
<Label For="username" />
<TextBox For="username" />
<ValidationMessage For="username" Message="Please type a valid username." />
</Form>
想了解更多或下载.
6. Brail View
Brail View Engine 是移植自MonoRail项目,目标是应用于 ASP.NET MVC 框架。它位于MvcContrib项目中: 一个基础项目。
了解更多
7. SharpTiles
SharpTiles 是一个基于构建于ASP.NET MVC和Monorail框架的模板View Engine. 它的理念是部分移植自JSTL与Tiles框架。
了解更多。
8. NHaml
设计目标:
.NET平台移植自Rails Haml的视图引擎。来自Haml的官网:
Haml是一种标记语言,用于清洁和简单的描述,不使用内联代码的任何Web文档的XHTML... Haml的避免了需要进行显式编码XHTML到模板,因为它实际上是一个抽象描述的XHTML,一些代码来生成动态内容。
优点:
•简洁的结构(例如:D.R.Y.的)
•良好缩进
•清晰的结构
•C#智能感知(VS2008没有ReSharper的)
缺点:
•一个来自XHTML抽象的概念,相比下你可使用其它熟悉的标记
•VS2010中没有智能感知
示例:
@type=IEnumerable<Product>
- if(model.Any())
%ul
- foreach (var p in model)
%li= p.Name
- else
%p No products available
asp.net 视图引擎归类的更多相关文章
- ASP.NET MVC 5 Web编程4 -- Razor视图引擎
Razor简介 Razor是ASP.NET新增的一个视图引擎,由微软全球最年轻的副总裁,有着"ASP.NET之父"称呼的Scott Guthrie主导的团队开发. 主导Razor开 ...
- ASP.Net MVC开发基础学习笔记:三、Razor视图引擎、控制器与路由机制学习
一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...
- Razor 视图引擎 – ASP.NET MVC 4 系列
Razor 视图引擎是 ASP.NET MVC 3 开始扩展的内容,并且也是默认视图引擎. Razor 通过理解标记的结构来实现代码和标记之间尽可能顺畅的转换.下面的例子演 ...
- ASP.Net MVC开发基础学习笔记(3):Razor视图引擎、控制器与路由机制学习
一.天降神器“剃须刀” — Razor视图引擎 1.1 千呼万唤始出来的MVC3.0 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留 ...
- Asp.net MVC 视图引擎
Asp.net MVC视图引擎有两种: 1.ASPX View Engine 这个做过WebForm的人都清楚 设计目标:一个用于呈现Web Form页面的输出的视图引擎. 2.Razor View ...
- Asp.Net Mvc视图引擎Razor介绍
1.Razor介绍 1)ASP.NET MVC3 带来了一种新的名为Razor 的视图引擎,提供了下列优点: Razor 的语法简单且清晰,只需要最小化的输入 Razor 容易学习,语法类似于 C# ...
- ASP.NET Razor 视图引擎编程参考
ASP.NET Razor 视图引擎编程参考 转载请注明出处:http://surfsky.cnblogs.com Rasor 视图引擎 http://msdn.microsoft.com/ ...
- ASP.NET MVC Razor视图引擎攻略
--引子 看下面一段MVC 2.0的代码. <%if (Model != null){%> <p><%=Model%></p><%}%>&l ...
- ASP.NET MVC 3 Razor 视图引擎 基本语法
本篇博文将进入MVC 3 的世界了,首先学习一下MVC 3 新增的Razor视图引擎的基本语法. 1. 使用 @ 字符将代码添加到页面中.正如传统的aspx视图的<% %>相同. ...
随机推荐
- finally return 执行顺序问题
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下fina ...
- Eclipse+Tomcat实现热部署/热加载配置,修改java代码无需重启tomcat
一.Tomcat热加载配置 Eclipse Package Explorer中找到Servers,点击你所需要运行的tomcat的config配置文件,例如 demo-config,双击该文件夹下的s ...
- vueJS 一天上手到精通
近来用vuejs, vuejs和angular的不同在于它直接暴露了一个构造函数,而后在里面写各种config, 和模板再相对,而且vuejs也有对应的模板双向绑定机制,这样就使开发非常简单容易,虽然 ...
- 游戏中的过程生成——元胞自动机 Celluar Automata 生成洞穴地形
最近在学习过程生成技术,在这里写一些心得. 对于元胞自动机,我们这里只讨论输入是一副二维bool数组的情况,即大多数游戏中的情况. 一个元胞自动机,对于一个输入,给出一个同样格式的输出.输出中的每个点 ...
- 上传代码到github上
初始化 git init 添加远程仓库 git remote add origin[仓库名] 仓库地址 添加文件 git add . 本地提交 git commit -m 'message' 拉去远程 ...
- python3 迭代器,生成器
一 .什么是迭代 1. 重复 2.下次重复一定是基于上一次的结果而来 while True: cmd=input(':') print(cmd) l=[1,2,3,4] count=0 while c ...
- DRF基类APIView的子类GenericAPIView
DRF的基类是APIView类,GenericAPIView类是APIView类的子类. GenericAPIView类有什么存在的意义呢? 其实, 他主要提供了两个用处: 1.提供关于数据库查询的属 ...
- Selenium2+python自动化51-unittest简介【转载】
前言 熟悉java的应该都清楚常见的单元测试框架Junit和TestNG,这个招聘的需求上也是经常见到的.python里面也有单元测试框架-unittest,相当于是一个python版的junit. ...
- 【hdoj_2037】今年暑假不AC
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2037 可以这样理解题意:将每个节目看做是一个区间,起始时间为左右端点,待求的是:最多可以有多少个区间互不相 ...
- 举例说明如何使用【聚合数据】的API接口
0 注册[聚合数据]的账号 登陆www.juhe.cn,如图,如果没有账号,注册一个(手机号或者邮箱注册),如果有直接登陆即可. 1 搜索所需的API接口 找到聚合数据主页,在搜索框输入你想搜索的AP ...