1.概述:Razor是mvc 3.0新扩展的内容,是默认的视图引擎,引擎一词可理解为Web Form中<% %>中的变形,但是Razor更加干净,轻量级,简单.使用了该引擎后,文件的后缀名将是cshtml(c#)或vbhtml(vb).
2.基本使用方法
@* 代码表达式 *@ <h2>hello @ViewBag.Msg</h2> @* 显式方式输出 *@ @{ string str = "hello world"; } <h1>@(str).model</h1> @*识别邮件地址*@ <span>fang@163.com</span> @*有歧义时要用显式输出格式*@ <span>stringLeng@(str.Length)</span> @*输出'@'符号时*@ <span>@@孙猴子@@</span> @*遇上Html编码时,Razor会自动看为字符串,以此防止XSS攻击 ,但是最好的方式是用'@Ajac.JavaScriptStringEncode'方法对用户输入进行编码来防止注入*@ @{ string str2 = "<script>alert('xss hack')</script>"; } <h2>@str2</h2> @*若要当成HTML输出亦可*@ <h1>@Html.Raw(str2)</h1> @*代码块自动识别结尾*@ @foreach(LogOnModel l in Model) { <p>@l.UserName</p> } @*混合代码和纯文本*@ @if (true) { <text>This a plain text</text> } @if (true) { @:This is a plain text! }
3.深入理解使用
3.1布局
Razor的布局方式使多个视图能够保持一样的外观
MVC 3.0+会自动生成一个_ViewStart视图文件,他会先于所有视图运行,里面就定义了布局文件
@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
打开布局文件可以看到
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> </head> <body> <div class="page"> <div id="header"> <div id="title"> <h1>我的 MVC 应用程序</h1> </div> <div id="logindisplay"> @Html.Partial("_LogOnPartial") </div> <div id="menucontainer"> <ul id="menu"> <li>@Html.ActionLink("主页", "Index", "Home")</li> <li>@Html.ActionLink("关于", "About", "Home")</li> </ul> </div> </div> <div id="main"> @RenderBody() <div id="footer"> @if (IsSectionDefined("footer")) { //渲染页脚 RenderSection("footer"); } else { <span>This is the default footer.</span> } </div> </div> </div> </body> </html>
其中@RenderBody()放置视图文件中的内容,若是有页脚则放置在RenderSection("footer"),这两个方法说白了就是一个占位符,对于默认的视图是没有页脚的,我们可以为视图加上页脚,如下代码
@RenderSection("Footer",false);
其中false是指不一定非要加页脚不可.他有两个重载,若是没设置第二个参数,或者第二个参数设置为true,则在视图中必须设置对应的渲染内容@section
视图中使用
@section Footer{ This is A <strong> Footer</strong> }
说到布局,就还要说个@RenderPage("/url.."),他在布局文件中使用,可以指定渲染的页面到布局中来.
@RenderPage("~/Views/Home/About.cshtml");