50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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:398817
用户头像

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

关注

评论

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

MySQL explain 中的 rows 究竟是如何计算的?

架构精进之路

MySQL

AI能写浙江高考满分作文了!在线满分作文生成器,一键圆你满分梦

程序员生活志

AI

英特尔首席架构师Raja:一个“百亿亿次级计算能力惠及每个人”的时代正在到来

最新动态

统一软件开发过程(RUP)的概念和方法

雯雯写代码

PHP之闭包函数

书旅

面向对象 闭包 函数

SpringBoot系列(六):SpringBoot 数据库操作(集成MyBatis)

xcbeyond

Java 微服务 mybatis springboot

如何正确认识区块链?

CECBC

区块链价值 区块链应用

分苹果

书旅

算法 LeetCode

如何从红蓝墨水中分离出红墨水?回声消除算法介绍

拍乐云Pano

音视频 WebRTC 回声消除 3A算法 音频技术

Junit执行单元测试用例成功,mvn test却失败的问题和解决方法

陈磊@Criss

Phalcon注解学习

Geek_4z9ami

php phalcon

网站改版神秘公式,教你躲避改版陷阱

北柯

创业 网站 网站搭建 网站改版

libuv 异步模型之设计概览

Huayra

libuv 异步模型

实践总结:在 Java 中调用 Go 代码

写代码的西瓜

年近而立,Java何去何从?

华为云开发者联盟

Java 开源 程序员 编程语言 Bugayenko Yegor

MySQL备份脚本,应该这么写

Simon

MySQL

Maven的爱恨情仇

xcbeyond

Java maven

如何写出完美的接口:接口规范定义、接口管理工具推荐

xcbeyond

Java 架构 接口规范

一瓶可乐的自动售货机指令“旅程”

华为云开发者联盟

物联网 嵌入式 华为云 数据传输 无线通信

腾讯人均月薪7.5w,我这是又被平均了?

程序员生活志

腾讯 职场 薪资

分布式链路追踪Skywalking 存储模型设计

胡弦(关注公众号架构随笔录)

分布式 Skywalking 高性能 分布链路追踪

SpringBoot系列(五):SpringBoot 日志配置(logback)

xcbeyond

Java 微服务 springboot logback

守护进程

书旅

php 进程 守护进程

终于知道Kafka为什么这么快了!

大头星

kafka 消息队列

面试官:说下对cookie,session,Token的理解

Java小咖秀

Java 面试

智“营”时代,众盟科技荣膺“2020毕马威中国领先消费科技TOP50企业榜单”

人称T客

面试造火箭,看下这些大厂原题

前端有的玩

Java 面试 大前端

JavaScript中的正则表达式详解

华为云开发者联盟

Java 正则表达式 程序员 字符串 语法

MySQL中timestamp和datetime,你用的对么?

xcbeyond

MySQL 数据库 后端

应用研发平台特惠专场,助力企业加速数智化发展

移动研发平台EMAS

免费DDoS攻击测试工具大合集

陈磊@Criss

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