本文内容
- ASP.NET MVC
- MVC 版本
- ASP.NET MVC 视图引擎
ASP.NET MVC
ASP.NET MVC 是微软官方提供的以 MVC 模式为基础的 ASP.NET Web Application 框架,它由 Castle 的 MonoRail 而来,最新版本 ASP.NET MVC 4.0。MVC(Model、View、Controller)将一个Web应用分解为:Model、View和Controller。ASP.NET MVC 框架提供了一个可以代替ASP.NET WebForm的基于 MVC 设计模式的应用。
MonoRail 的核心是 Action Pack 在 .NET上的实现,是一个 .NET 的 MVC Web 开发框架,原名 Castle On Rails,是 CastleProject 的一个子项。MonoRail 的开发模式和传统 WebForm有很大区别。WebForm 属于 PageController 模式,每一个页面对应一个 Controller,通常情况下,这个 Controller 就是 URL。System.WebUI.Page 实现了 IHttpHandler,与每个 aspx 相关的类都各自处理自己的 http 请求, 经一些逻辑处理后,输出自己的视图;而 MonoRail 是 FrontController 模式,由 Castle.MonoRail.Framework.MonoRailHttpHandler 接管所有请求,然后根据请求的 URL 创建相应的 Controller,Controller 再调用相应的 action,最后调用模板引擎输出内容。默认情况下,一个URL 结构是 Controller/action,例如 http://localhost/monorailSample/Home/index.rails 对应类 HomeController的 Index() 方法。
MVC 版本
- MVC 2.0 - 该版本适用于 VS 2008 及基于 ASP.NET 3.5 平台的 Visual Web Developer 2008 Express。而 VS 2010 正式版与 Visual Web Developer 2010 正式版中内置对 ASP.NET MVC 2的支持,无需另外安装。
- MVC 3.0 - MVC 3中提供了新的View引擎:Razor。
- MVC 4.0 - MVC 4 内置于VS 2012,新增手机模版、单页应用程序、Web API等模版,更新了一些 JavaScript 库,其中示例页面也使用了 jQuery 的 AJAX 登录,并增加了 OAuth认证/Entity Framework 5 的支持。同时也增强了对 HTML 5、AsyncController 等的支持。
ASP.NET MVC 视图引擎
ASP.NET MVC 主要有四种视图引擎。最新的 Razor 引擎(WebPages),其他三种是传统的 ASPX(WebForms)、Spark 和 NHaml。
- ASPX 风格的视图引擎可以追溯到遥远的 ASP,用传统的 .aspx 文件做模板,可以照常使用aspx语法,如 <%= %> 和 <%: %> 语法占位符,以及服务器控件,但是由于 WebForm 生命周期(较昂贵)和MonoRail完全不同。
- Spark 是ASP.NET MVC与 Castle 项目 MonoRail 框架的视图引擎 。其采取了稍微不同的做法。它既支持占位符,也可以用特殊的属性和标签不受限制地把 HTML 和代码混合在一起。这或许有些繁琐,但却拥有完全兼容 XML 的优势。
- NHaml 是 .NET 平台移植自 Rails Haml 的视图引擎。Haml 是一种标记语言,描述简洁,不使用内联代码的任何 Web 文档的 XHTML。Haml 避免了需要进行显式编码 XHTML 到模板,因为它实际上是一个抽象描述的 XHTML,一些代码来生成动态内容。 这种语言根本不使用 XML 语法。借助于一种速记语法,免去了前一种风格(XML)中大量的语法"噪音",比如结束标签等。
最新的视图引擎 Razor,从 Asp.net MVC 3 版本引入, 支持Unit Test,很容易上手。虽然它与前面的模板系统有些共性,但和我们前面讨论的三种视图引擎截然不同。不同于 NHaml,Razor 仍然使用 XML 标记;又不同于 Spark,Razor 使用 XML 代码方面没有走得那么极端;也不完全类似于 ASPX,它把那些比较笨重的占位符 <%= %> 和 <%: %> 替换成 @ 符号,不需要特殊的结束标记,代码很简练。
默认情况下,从 @ 表达式生成的所有文本都是HTML编码过的【译注:从而防止XSS攻击】。@块里面的文本可以包含多个"HTML内容块"。当识别出任意的XML标签,Razor就会切换回HTML模式,跟传统ASP开发人员使用"%> html代码 <%="的技巧非常相似。如果你实际不希望XML标签切换回HTML模式,你可以使用< text>作为一个占位符。
Razor 使用现有的 VB 或 C# 语法。任何文本编辑器都可以用来编辑Razor文件,而 VS 2010 加入对 Razor 文件智能提示的完全支持。
Razor 的另一个重要特点是它与单元测试框架的兼容性。Razor 模板不需要 Controller 或 Web 服务器作为宿主(host),所以用它写出来的视图应该是充分可测的。对于 ASPX,虽然理论上一 切皆可测试,但实际上却是相当困难;而其他两个引擎在各自的网站上面甚至都没有真正提到可测试性。
四个视图引擎都支持母版页的概念。对于把视图预编译进 Assembly 文件,ASPX 只提供了部分支持,而 Razor 和 Spark 都是完全支持。NHaml 目前把这项还是放在需求特性的列表上面。特别有趣的是,Razor 和 Spark 预编译出的视图可以用在无宿主的场景下,比如邮件合并引擎。
此外,还有 Hasic 、Bellevue、NVelocity、Brail 和 SharpTiles。Hasic 是一个用VB.NET's XML literals的Asp.net MVC 引擎;Bellevue 是一个Asp.net MVC框架的开源模板原形,以HTML为其核心没有其它更多的语法;NVelocity 需要学习VTL语法,使用很简单,特别是很多Java程序员已经熟悉Velocity。简单的语法也强迫程序员把逻辑和界面很好的分离开来,方便跟美工配合;Brail 是移植自MonoRail项目。基于Boo的模板引擎,Boo是一种语法类似 Python 的 .NET 语言。据 MonoRail 的参考说,Brail引擎是功能最强、性能最好的选择,但Boo是一种陌生的语言,这成了Brail引擎应用的最大障碍。MonoRail推荐使用的模板引擎是NVelocity,但说不定哪天Brail会赶上来;SharpTiles 是一个基于构建于ASP.NET MVC和Monorail框架的模板View Engine. 它的理念是部分移植自JSTL与Tiles框架。