ASP.NET MVC中的Razor语法
Posted 积少成多
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET MVC中的Razor语法相关的知识,希望对你有一定的参考价值。
1.Razor的基本语法
@* 多行代码时需要包含在大括号内{}和每句代码后都需要加分号; *@ @{ ViewBag.Title = "Index"; ViewBag.Name = "Linq"; ViewBag.IsOk = false; List<string> list = new List<string>() { "11", "22", "33", "44", "55", "66" }; ViewBag.Description = "<span style=‘font-weight: bold;‘>迷失之牙</span>"; } @* 单行代码时不需要分号结束 *@ <p>@DateTime.Now</p> <p> 名称:@("欢迎," + ViewBag.Name) 状态:@(ViewBag.IsOk ? "是" : "否") @@Linq </p> @if (ViewBag.IsOk != null && ViewBag.IsOk) { @:启用 } else { @:停用 } @if (ViewBag.IsOk != null && ViewBag.IsOk) { <span>1.启用</span> } else { <span>2.停用</span> } @if (ViewBag.IsOk != null && ViewBag.IsOk) { <text> 1234567 <span>1. 启用</span> </text> } else { <text> 1234567 <span>2. 停用</span> </text> } <ul> @foreach (var item in list) { <li>@item</li> } </ul> @* 所有Razor语法输出的变量都会被html编码(HTMLEncode)后输出,如果想里面的HTML标签生效要调用Html.Raw方法 *@ @ViewBag.Description @Html.Raw(ViewBag.Description) @{ <h2>混合例子 @(ViewBag.Name)</h2> foreach (var item in list) { <li>@item</li> } }
2.Razor的主板页面框架
2.1 Razor页面执行顺序
Controller回传给ViewResult给MvcHandler之后,MvcHandler会先设法找出对应的检视页面,然后Razor页面执行生命周期
被MvcHandler找到Razor页面会优先执行,然后检查这个View页面是否有Layout属性
2.2 关于_ViewStart
2.2.1/View/_ViewStart.cshtml文件会在/View/目录下任何View被截入前就先被截入,任何与Controller同名的View子目录下也能出现相同的_ViewStart.cshtml如此一来就可以不同的Controller对应不同的_ViewStart.cshtml
2.3 _Layout布局页面
2.3.1 _Layout.cshtml和一般的Razor的检视页面差不多,不同的地方是有2个Razor语法,分别是@RenderBody(预设坑洞)与@RenderSection(具名坑洞)
[email protected]辅助方法
Razor提供了一种很方便的语法,让你可以将View页面中部分内容或部分代码抽取出来,变成一个独立的辅助方法
<p>@ShowTime() </p> @helper ShowTime() { @DateTime.Now; }
[email protected]自定义函数
在@helper无法自定义属性,自能单纯地传入参数,然后格式化你想要呈现的样子直接输出。所以Razor还提供@functions自定义函数功能
<p>@ShowTime() </p> @functions{ public IHtmlString ShowTime() { return new HtmlString(DateTime.Now.ToString()); } }
[email protected]引用参考资料类别
在Razor页面里面可以在页面最上方通过@using引用这一个View页面里面会用到的命名空间
@using MvcApplication1.Models
<pages validateRequest="false" pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> <controls> <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" /> </controls> <namespaces> <!--也可以配置在配置文件里面--> <add namespace="MvcApplication1.Models"/> </namespaces> </pages>
[email protected]引用参考资料型别
public ActionResult Index() { List<User> list = new List<User>(); list.Add(new User() { Name="11",Age=11}); list.Add(new User() { Name = "12", Age = 12 }); list.Add(new User() { Name = "13", Age = 13 }); return View(list); }
@using MvcApplication1.Models @{ var data = (IEnumerable<User>)Model; } <ul> @foreach (var item in data) { <li>@item.Name</li> } </ul>
@using MvcApplication1.Models @model IEnumerable<User> <ul> @foreach (var item in Model) { <li>@item.Name</li> } </ul>
7.布局页
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>@ViewBag.Title</title> </head> <body> <div id="header"> @if (IsSectionDefined("header")) { @RenderSection("header", false) } else { <h1>没有填充@RenderSection("header", false)</h1> } </div> <div> @Html.Partial("_LayoutUser") </div> <div> @RenderBody() </div> <div id="footer"> @RenderSection("footer",false) </div> </body> </html>
@{ ViewBag.Title = "About"; Layout = "~/Views/Shared/_LayoutTest.cshtml"; } <h1>我是@RenderBody()</h1> @section footer { <h1>我是@RenderSection("footer",false)</h1> }
以上是关于ASP.NET MVC中的Razor语法的主要内容,如果未能解决你的问题,请参考以下文章