asp.net mvc 3 实践 Razor视图引擎 上
出自 微软教学视频 http://social.msdn.microsoft.com/Forums/zh-CN/295/thread/6ed5a975-347e-483c-bcb9-86c72226f9cb
1.ASP.NET mvc 3 的视图引擎
ASPx
Razor(建议大家在新项目中使用Razors 视图)
ASP.net MVC 3 支持多视图引擎机制
-可以在您制定的项目中指定默认的视图引擎
-MVC3中自有的上述引擎
-Spark (其他视图引擎)
-Nhaml
-Ndjango
-你自己定义的视图引擎
2.Razor视图引擎
-Razor视图引擎是对以代码为焦点的方法实现;以代码为焦点
特点:
-简洁、富于表现、流畅
-尽量减少编写一个视图模版所需要敲入的字符数实现快速流畅的编程工作。(文件减小。自闭合标签)
-不必为了明确标记出服务模块的开始和结束而终端编程,Razor解析器能从你的代码中自动推断出来
-易于学习
-熟悉现在的编程语言和HTML技能就能快速学会()
-可以在任何文本编辑器中工作
-VS2010对其增加了智能提示(类的方法、属性访问,都会有只能提示)
-支持单元测试()
3.简洁、流畅
aspx <ul id="products"> <% foreach(varr p in produts) {%> <li> <%=p.Name %> <$<%=p.price%>> </li> <% } %> </ul> Razor <ul id="products"> @foreach(var p in produts){ <li> @p.Name ($@p.Price) </li> } </ul>
4.伟大的@符号
-Razor中服务端代码段的起始位置均使用@符号做开始
5.代码块
aspx <% int x = 123; String y = "because."; %> Razor @{ int x = 123 String y = "because." }
6.渲染输出
-经过HTML编码(请大家记住这些区别)
aspx <span> <%:model.Message%> </span> Razor <span>@model.Message</span>
-未经HTML编码
aspx <span><%=model.Message%></span> Razor <span> @Html.Raw(model.Message) </span>
7.代码和标记混合
aspx <% foreach(var item in items) {%> <span> <%:item.Prop %> </span> <% } %> Razor @foreach(var item in items){ <span> @item.Prop </span> }
8.代码与纯文本混合
aspx <% if(foo) { %> Plain Text <% } %> Razox 1. @if(foo){ <text> Plain Text <text> } 2. @if(foo){ @:Plain Text }
9.<text> 标签的说明
-<text>标签是一个Razor特殊处理的元素。
Razor将<text>块的内部内容视为内容快,不呈现包含哪些内柔的<text>标签(这意味着只呈现<text>内部内容,不呈现标签本身)。这使呈现没有被HTML元素包装的多行内容块变得方便。
10.表达式与文本混合
aspx Hellp <%:title%> . <%: name %> Razor Hello @title . @name
11. Email 地址
ksport@qq.com
Razor可以自动识别Email 地址而不作为服务器端代码来执行
@符号
-两个连续的@@符号会被渲染为一个@符号
12.显示渲染输出 (小括号)
<span>ISBN@(isbnNumber) </span>
加上 小括弧进行显示渲染输出,直接输去,不会当作email地址输出,
13.服务器端注释
aspx: <%-- 注释内容 --%>
Razor: @* 注释内容 *@
14.渲染输出动态方法,直接使用小括弧
@(myClass.MyMethed<myType>())
15.创建 Razor 委托
-我们通过创建Razor委托来复用一些视图逻辑
定义 @{ Func<dynamic,object> b = @<strong>@item</strong>; } 调用 @b("Bold this")
16.内容中混合代码
<ul> @foreach (var p in products){ <li> @p.ProductName @if(p.UnitsInStock == 0){ @: (Out of stock!输出的文本) }else if (p.UnitsInStock < 4 ){ @: (only @p.UnitsInStock left!) } </li> }
17.多行内容混合代码
-内容在html标记闭合中时
有html 标签包装 @if(p.UnitsInStock == 0){ <p> Line one of contect Line two of content Date is: @DateTime.Now four....... </p> } 没有html 标记包装 @if(p.UnitsInStock == 0){ @: Line one of contect @: Line two of content @: Date is: @DateTime.Now @: four....... 或者 <text> contect content Date is: @DateTime.Now four....... </text> }