写点什么

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

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

关注

评论

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

对象存储手把手教七 | 存储空间授权策略 Bucket Policy

QingStor分布式存储

分布式系统 对象存储 分布式存储 分布式,

实战篇:断点续传?文件秒传?手撸大文件上传

阿Q说代码

断点续传 签约计划第二季 文件秒传 文件分块 文件合并

后端开发实战总结 | 签约计划第二季|后端

阿Q说代码

内容合集 签约计划第二季 技术专题合集

全程干货,用 python 下载某站全部【免抠图片】,图片背景透明,格式PNG

梦想橡皮擦

12月日更

Linux学习方法《Linux一学就会》Linux系统进程管理

侠盗安全

Linux linux运维 运维工程师 云计算架构师

恒源云(GPUSHARE)_GPU白嫖大法来袭!

恒源云

深度学习 gpu 算力加速

Spark从入门到精通

冇先生

IoT Stack 2.0升级物模型及数据交互协议, 大幅提升物联网方案交付速度

百度大脑

人工智能 百度 物联网

「Spark从精通到重新入门(一)」Spark 中不可不知的动态优化

尔达Erda

云计算 大数据 spark 开发者 感悟

Android技术分享| ViewPager2离屏加载,实现抖音上下视频滑动

anyRTC开发者

android 音视频 移动开发 ViewPager 视频滑动

语法糖甜不甜?巧用枚举实现“状态”转换限制

阿Q说代码

枚举 签约计划第二季 语法糖 订单状态转换

PackML从会到不会——标签(3)

陈的错题集

标准化 PackML

Flink 是如何统一批流引擎的

编程江湖

大数据 flink

如果还不懂如何使用 Consumer 接口,来公司我当面给你讲!

阿Q说代码

函数式接口 签约计划第二季 consumer 实战讲解 supplier

用户登录设计之双token设计

CRMEB

12.7直播预告|「淼懂·观测云实践学堂」全新栏目上线!带你走进观测云的精彩世界!

观测云

可观测性 直播 可观测

如何在 ShardingSphere 中开发自己的 DistSQL

SphereEx

Java 数据库 ShardingSphere database SphereEx

实战篇:Security+JWT组合拳 | 附源码

阿Q说代码

spring security JWT 签约计划第二季 权限验证

看了同事写的代码,我竟然开始默默的模仿了。。。

阿Q说代码

策略模式 多态 签约计划第二季 自定义参数解析器 统一验签

大数据中不同文件格式的比较

吴脑的键客

大数据 云存储

高校企业双向赋能,首届飞桨启航菁英计划圆满结束

百度大脑

人工智能 百度 飞桨

Flink CDC 系列 - 构建 MySQL 和 Postgres 上的 Streaming ETL

Apache Flink

大数据 flink 编程 后端 实时计算

还在用BeanUtils拷贝对象?MapStruct才是王者!【附源码】

阿Q说代码

Java MapStruct 签约计划第二季 深拷贝与浅拷贝

看了这么多年西游记,你可知道孙悟空是如何召唤土地公公的吗?

阿Q说代码

Java 观察者模式 签约计划第二季 事件通知机制

秒过!度目智慧通行让常态化防疫更高效

百度大脑

人工智能 人脸识别

前端开发面试之框架react的相关问题及答案

@零度

大前端 React

Java中抽象类和接口的区别

编程江湖

JAVA开发 java编程

看FusionInsight Spark如何支持JDBCServer的多实例特性

华为云开发者联盟

大数据 SQL语句 FusionInsight Spark JDBCServer 多实例

【活动报名】Apache ShardingSphere Dev Meetup 重启!

SphereEx

开源项目 开源社区 ShardingSphere Meetup SphereEx

『上线』OpenSEC SIGs 终于成立了!

SphereEx

开源社区 ShardingSphere SphereEx 中文开源 OpenSEC

长连接网关技术专题(六):石墨文档单机50万WebSocket长连接架构实践

JackJiang

websocket 即时通讯 IM 网关

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