概述
随着MVC 3.0的发布,越来越多的人都纷纷投入了基于MVC 3.0的开发,不仅如此,MVC 3.0的Razor引擎更是在UI上给力,使得表单数据显示变得更加简便,给人眼前一亮的感觉。
一开始的WebForm页面 Html标签和C#代码混用看上去杂乱,而且<% %>标记成对出现,有时代码太混乱了都找不到前后标记,杯具啊!!!
MVC 3.0 新的WebPages设计,他给我们简洁的代码实现方案。简单的@标记就可以代替成对出现的<% %>,使用起来方便快捷。
实例代码:Razor之简
ASPX
<script src="<%: Url.Content("~/Scripts/jquery-1.4.4.min.js") %>" type="text/javascript"></script>
Razor
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
非常明显,Razor在内部帮我们做了闭合<%%> 其实就是这个小小的闭合让我们可以在html内更加“流畅”的调用服务端代码。可见Razor的出现还是很给力的!!!
Razor(CSHTML)引擎
_appstart.cshtml :
应用程序启动时在Global. Application_Start方法后执行。
用于进行App的初始化时,需要进行处理的内容.例:向数据库记录系统初始化的一些信息。
功能与Global.Application_Start类似,差别在于:Global的Start先执行,然后在到该_appStart,值得注意的是在_appStart上下文中可以使用.NET4的dynamic新特性,作为属性、字段、索引器、参数、返回值或类型约束的类型。
_Layout.cshtml:
布局页面即和aspx的母版页相似。
Razor基础语法
Razor语法其实很简洁就是以@开头,输出变量要以@开头,循环判断for if等还是以@开头,代码体更是要以@开头。。
代码注释
@*输出变量*@
上下文使用变量
@{ ViewBag.Title = "主页"; } @*输出变量*@ <h1> 这是 @ViewBag.Title</h1>
效果
输出Html内容
@{ ViewBag.Title = "主页"; } @*输出Html内容*@ @{ <p>@ViewBag.Title</p> <div> DIV</div> }
效果
支持C#语法
@* 支持C#语法*@ @{ var list = new List<string> { "张三", "李四", "王五", "赵柳" }; foreach (var person in list) { <li><a href="Index">@person</a></li> } }
效果
支持逻辑关键字如foreach if else等
@{ ViewBag.Title = "主页"; } @* 支持C#语法*@ @{ var list = new List<string> { "张三", "李四", "王五", "赵柳" }; } @* 支持逻辑关键字如foreach if else等*@ @foreach (var person in list) { <li><a href="Index">@person</a></li> }
效果
逻辑判断
@{ ViewBag.Title = "主页"; } @* 支持C#语法*@ @{ var list = new List<string> { "张三", "李四", "王五", "赵柳" }; } @* 逻辑判断*@ @if (list.Count > 0) { foreach (var person in list) { <li><a href="Index">@person</a></li> } }
效果
文字输出 变量输出
@{ ViewBag.Title = "主页"; } @* 支持C#语法*@ @{ var list = new List<string> { "张三", "李四", "王五", "赵柳" }; } @* 文字输出 变量输出*@ @{ @:(*^__^*) 嘻嘻 @:@list[0] }
效果
数据类型强制转换
@*数据类型强制转换*@ @{ var i = "10"; } <p> i = @i.AsInt() </p>
效果
循环
@{ ViewBag.Title = "主页"; } @* 支持C#语法*@ @{ var list = new List<string> { "张三", "李四", "王五", "赵柳" }; } @*循环*@ @for (int j = 0; j < list.Count; j++) { @:@j: @:@list[j] } <br /> @*第二种写法*@ @{ for (int j = 0; j < list.Count; j++) { @:@j: @:@list[j] } }
效果
Razor自定义控件
看看微软自己提供的登录和注销
ASPX
LogOnUserControl.ascx页面
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <% if (Request.IsAuthenticated) { %> 欢迎使用 <b><%: Page.User.Identity.Name %></b>! [ <%: Html.ActionLink("注销", "LogOff", "Account") %> ] <% } else { %> [ <%: Html.ActionLink("登录", "LogOn", "Account") %> ] <% } %>
Razor
_LogOnPartial.cshtml页面
@if(Request.IsAuthenticated) { <text>欢迎使用 <b>@Context.User.Identity.Name</b>! [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text> } else { @:[ @Html.ActionLink("登录", "LogOn", "Account") ] }
调用
ASPX
Site.Master页面
<div id="logindisplay"> <% Html.RenderPartial("LogOnUserControl"); %> </div>
Razor
_Layout.cshtml页面
<div id="logindisplay"> @Html.Partial("_LogOnPartial") </div>
关于布局母板以后再探讨。。
总结
从没有接触过Razor的我,今天在做了这么多练习后,突然对Razor引擎有了莫名的好感,感觉很给力。不知大家有没有这种感觉。。
希望MVC在以后的版本里面能够持续出新,在编码方式上带给我们新的享受。。。