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

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

关注

评论

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

2021程序员春招必备:Java面试知识点+答案(7大分类 5000字解析)

比伯

Java 编程 架构 面试 程序人生

无线网络的用户隔离功能

工作三年,小胖问我:什么是生产者消费者模式?菜到抠脚!

一个优秀的废人

Java 多线程 阻塞队列 生产者与消费者

聊聊园区网中的专网架构

冯骐

运维 网络 VRF 虚拟路由表

迎战大厂!“金三银四”和春招通过率达95%的Java面试要点集锦

Java 程序员 架构 面试

Wireshark数据包分析学习笔记Day1

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

程序员成长第十九篇:要不要转管理岗?

石云升

程序员 28天写作 职场经验 管理经验 3月日更

2021抖音面经分享:Java进阶核心知识集/算法刷题宝典(金三银四必备)

比伯

Java 编程 架构 面试 程序人生

科技强国梦的百度式注脚:扎根土壤、拥抱变局、眺望星空

脑极体

(28DW-S8-Day13) 在线教育班型和角色

mtfelix

28天写作

翻译:《实用的Python编程》03_05_Main_module

codists

Python

AI数学基础之:概率和上帝视角

程序那些事

人工智能 AI 程序那些事 概率论

MySQL数据库DDL、DML详解

若尘

MySQL

Java的锁

并发编程

聊聊我对SCRM的理解

boshi

CRM 七日更

Nydia

Elasticsearch Analyzer 分词器

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

通俗易懂!看了不会忘的网络面试知识点

编程 架构 面试

【回溯算法】经典题:求目标和的组合方案 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

Kubelet从入门到放弃系列:GPU加持

DCOS

AI gpu Kubernetes 云原生

windows 搭建ftp服务

xiezhr

vsftpd ftp ftp服务 文件服务 3月日更

dubbo 源码 v2.7 分析:通信过程及序列化协议

程序员架构进阶

架构 RPC 七日更 dubbo源码 3月日更

项目汇报会复盘

Geek_XOXO

从JVM底层原理分析数值交换那些事

秦怀杂货店

JVM 交换数值

Kubectl Plugin 推荐(一)| 可观测性篇

郭旭东

kubectl kubectl plugin

《精通比特币》学习笔记(第二章)

棉花糖

区块链 读书笔记

Elasticsearch Index Management 索引管理

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

不知不觉不假思索——可供性

Justin

心理学 28天写作 游戏设计

三十而已

ES_her0

28天写作 3月日更

MySQL数据库的安装与使用

若尘

MySQL 数据库

关于写作的一点小想法「Day 13」

道伟

28天写作

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