"Razor"是一個非常好的新的視圖引擎,它提供了流暢的專註於代碼的模版方案。它的編碼工作流程快速、富有表現力並有趣。文法簡練並節省按鍵次數,同時還提升了代碼的可讀性。ASP.NET的ASPX標記文法使用"<%= %>"或"<%: %>"來標記"代碼碎塊",每一個代碼碎塊都需要5個字元來標明代碼的開始和結束位置。在Razor視圖引擎中,你只需要用一個"@"字元就可以標識代碼塊的開始,與"<% %>"代碼碎塊不一樣,Razor不需要你顯式指明代碼塊的結束位置。
1.注釋
1 @*我是注釋1*@2 <!--我是注釋2-->3 @{4 //我是注釋35 }
2.執行C#語句
1 <b>執行C#語句:</b>2 @DateTime.Now.Date.ToShortDateString()
3.執行C#代碼塊
1 <b>執行C#代碼塊:</b> 2 @*支援C#文法:注意";"*@ 3 @{ 4 List<string> list = new List<string>() { "MVC3", "Razor" }; 5 list.Add(".Net4"); 6 list.Add(""); 7 } 8 @* 支援邏輯關鍵字如foreach if else等*@ 9 @foreach (string s in list)10 {11 if (string.IsNullOrEmpty(s))12 {13 <li>空</li>14 }15 else16 {17 <li>@s</li>18 }19 }20 @* 文字輸出 變數輸出*@21 @{22 @:@list[0]23 @:list[0]24 }
4.使用html標記輸出變數、文本
5.@{...}內部使用@:進行單行輸出變數、文本,否則報錯。
6.Email和@符號
大部分情況下,Razor解析器都有足夠的能力推匯出模板裡的一個"@"字元到底是在代碼中用到,還是在靜態常值內容中用到。Razor會分析"@"字元右邊的內容來判斷它到底是代碼還是靜態常值內容(電子郵件被當作靜態內容輸出)。
1 @{2 //輸出@3 @:ʄ //輸出@5 @:@@6 //自動識別email輸出lhp0704@163.com7 @:lhp0704@163.com8 }
7.@Url.Content
將虛擬(相對)路徑轉換為應用程式絕對路徑。如果指定的內容路徑不以否定號 (~) 字元開頭,此方法將返回沒有改變的 contentPath。
1 <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />2 <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
8.@RenderSection()
可以有選擇性地定義幾個不同的"節",允許基於這個版面設計的視圖模板通過"填入"自訂的內容來覆寫它。這就允許你在視圖中覆寫版面設計頁裡不連續的內容段落,從而使你的網站版面設計更有彈性。
false表示具體頁面可以不實現section Head。
1 @*使用@RenderSection方法預設一個地區,未來給繼承該頁的View使用*@2 @RenderSection("Head", required: false)
1 @section Head{2 <script type="text/javascript">3 $(function () {4 alert("Hello World");5 });6 </script>
9.@RenderBody()
使用RenderBody()的輔助函數,放在模板中需要根據所請求的URL而"填入"具體內容的地方。
~/Views/Shared/下_Layout.cshtml
1 <div>2 開始3 @RenderBody()4 結束5 </div>
~/Views/Home/下Index.cshtml
1 @{2 ViewBag.Title = "首頁";3 }4 <p>5 將內容放置在此處@RenderBody()。6 </p>
10.@RenderPage()
~/Views/Shared/下_Layout.cshtml
1 <div> 2 開始 3 @RenderBody() 4 結束 5 <br /> 6 開始 7 @*可以多次使用*@ 8 @RenderPage("~/Views/Home/About.cshtml") 9 結束10 </div>
~/Views/Home/下About.cshtml
1 @{2 ViewBag.Title = "關於我們";3 }4 <p>5 將內容放置在此處。6 </p>
11.資料傳遞
ViewData擷取或設定一個字典,其中包含在控制器和視圖之間傳遞的資料。
ViewBag擷取視圖包。
TempData擷取要傳遞到視圖的臨時資料。
~/Views/Home/下Index.cshtml
1 @{2 ViewBag.Title = "首頁";3 }4 <p>5 將內容放置在此處@RenderBody()。6 </p>
~/Controllers/下HomeController.cs
1 public ActionResult Index()2 {3 ViewBag.Message = "歡迎使用 ASP.NET MVC!";4 ViewData["Name1"] = "Razor視圖引擎1";5 TempData["Name2"] = "Razor視圖引擎2";6 return View();7 }
~/Views/Shared/下_Layout.cshtml
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>@ViewBag.Title</title> 6 </head> 7 <body> 8 <div> 9 @RenderBody()10 @ViewBag.Message<br />11 @ViewData["Name1"]<br />12 @TempData["Name2"]13 </div>14 </body>15 </html>