写点什么

ASP.NET MVC 的四种视图引擎

  • 2010-07-14
  • 本文字数:1075 字

    阅读完需:约 4 分钟

继上周介绍了 Razor 之后,ASP.NET MVC 现在已有四种主要的视图引擎。其他三种引擎是 Spark、NHaml 和传统的 ASPX 文件模板。本文将大致介绍这四种引擎,并着重讨论新的 Razor 引 擎。

ASPX 风格的视图引擎可以追溯到遥远的 ASP。使 用 <%= %> 和 <%: %> 语法的占位符在这类风格中占据了统治地位。随着时间的推移,ASPC 控件被加入进来,之后是母版页(Master Page),但这同时也带来 了昂贵的页面生命周期。

Spark ,在 Castle 项目的 MonoRail 中也使用到,其采取了稍微不同的做法。它既支持占位符,也可以用特殊的属性和标签不受限制地把 HTML 和代码混合在一起。它或许有些繁琐,但却拥有完全兼容 XML 的优势。

NHaml Haml 标记语言的.NET 实现。这种语言根本不使用 XML 式的语法。借助于一种速记语法,它免去了前一种风格(xml)中大量的语法噪音,比如结束标签等。

最新的视图引擎是微软的 Razor 。虽然所有的模板系统都具有一些共同特征,但 Razor 却和我们前面讨论的三种视图引擎截然不同。不同于 NHaml,Razor 仍然使用 XML 标记;但又不同于 Spark,Razor 在使用 XML 代 码方面没有走得那么极端。它也不完全类似于 ASPX,因为它把那些比较笨重的占位符替换成 @符号接表达式或者普通的控制块。因为不需要特殊的结束标记,所 以 Razor 最终的代码很简练。

默认情况下,从 @表达式生成的所有文本都是 HTML 编 码过的【译注:从而防止 XSS 攻击】。@块里面的文本可以包含多个“HTML 内容块”。当识别出任意的 XML 标签,Razor 就会切换回 HTML 模式,与传统 ASP 开发人员使用“%> html 代码 <%=”的技巧非常相似。如果你实际不希望 XML 标签切换回 HTML 模式,你可以使用作为一个占位符。

因为 Razor 使用了现有的 VB 或 C#语法,微软预计它将很容易学习。任何文本编辑器都可以用来编辑 Razor 文件,而 Visual Studio 2010 也将更新加入对 Razor 文件智能提示的完整支持。

Razor 的另一个重要特点是它与单元测试框架的兼容性。Razor 模板不需要 Controller 或 Web 服务器作为宿主(host),所以用它写出来的视图应该是充分可测的。对于 ASPX,虽然理论上一 切皆可测试,但实际上却是相当困难;而其他两个引擎在各自的网站上面甚至都没有真正提到可测试性。

四个视图引擎都支持母版页的概念,所以在这方面没有太 多可谈的内容。对于把视图预编译进 assembly 文件,ASPX 只提供了部分支持,而 Razor 和 Spark 都是完整地支持。NHaml 目前把这项还是 放在需求特性的列表上面。特别有趣的是,Razor 和 Spark 预编译出的视图可以用在无宿主的场景下,比如邮件合并引擎。
查看英文原文 Four View Engines for ASP.NET MVC

2010-07-14 19:398638
用户头像

发布了 76 篇内容, 共 26.8 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

在DAYU200上实现OpenHarmony视频播放器

OpenHarmony开发者

OpenHarmony

vue这些原理你都知道吗?(面试版)

bb_xiaxia1998

Vue

量化与科技的相遇!亚马逊云科技揭开神秘的量化私募

Lily

2022年最新【Java经典面试800题】面试必备,查漏补缺;多线程+spring+JVM调优+分布式+redis+算法

Geek_0c76c3

Java 开源 程序员 架构 面试

前端培训怎么学习好就业?

小谷哥

数字化转型失败率高达84%?看看数字化转型方法对不对

雨果

数字化转型

Github星标57.9K!阿里巴巴Java面试突击汇总(全彩版)首次公开

Geek_0c76c3

Java 数据库 程序员 架构 开发

数字化转型必读:从信息化到数字化的本质是什么

雨果

数字化转型 数字化 数字化业务转型 信息化本质

如何处理损坏的sst文件

TiDB 社区干货传送门

实践案例 管理与运维 故障排查/诊断

如何给TiDB集群的prometheus更换端口

TiDB 社区干货传送门

实践案例 集群管理 安装 & 部署 扩/缩容

How Good is TiDB as an HTAP System? A HATtrick Benchmark

TiDB 社区干货传送门

vue面试之Composition-API响应式包装对象原理

bb_xiaxia1998

Vue

全网首发“Java面试考点大全”,25+专题梳理:JVM+多线程+Spring全家桶+MySQL+Redis等

Geek_0c76c3

Java 数据库 开源 程序员 开发

web丨nft元宇宙链游项目系统开发模式逻辑详细(成熟源码)

I8O28578624

java培训机构口碑排名哪家比较好?

小谷哥

web前端开发培训学习后的就业方向

小谷哥

Java面试最强10W字面经,Github访问量破百万,火热涨星中!

Geek_0c76c3

Java 开源 程序员 面试 开发

阿里前端高频vue面试题(边面边更)

bb_xiaxia1998

Vue

单刷 3 届 Hackathon,朝着理想中的数据库出发丨TiDB Hackathon 选手访谈

PingCAP

TiDB

数据分析师被当作取数机怎么办?

雨果

数据中台 数据分析师

Hashtable、HashMap、TreeMap的区别

zarmnosaj

10月月更

堡垒主机是堡垒机吗?两者有什么关系?

行云管家

网络安全 信息安全 堡垒机 堡垒机主机

分享一个好问题:企业为什么要区分数据中台和数据平台?

雨果

数据中台 大数据平台

消除两个开源项目之间长达4年的分叉

TiDB 社区干货传送门

TiDB 底层架构

堡垒机推荐厂商当属哪家?为什么?咨询电话多少?

行云管家

网络安全 信息安全 数据安全 堡垒机

32天高效突击:狂刷《Java权威面试指南(阿里版)》,offer拿到手软

Geek_0c76c3

Java 数据库 开源 程序员 架构

数据培训机构的学习费用是多少

小谷哥

《数据迁移》--单库迁移

TiDB 社区干货传送门

迁移

灵雀云全栈云原生开放平台ACP登陆VMware云市场

York

容器 云原生 数字化转型 虚拟化 应用现代化

前端技术培训后的职业规划

小谷哥

io模型

wzh

Linux io Linux Kenel IO模型

ASP.NET MVC的四种视图引擎_.NET_Jonathan Allen_InfoQ精选文章