ASP.NET MVC Razor檢視引擎

竹林聽雨行發表於2019-03-02

本篇文章我們一起來討論ASP.NET MVC框架中的Razor檢視引擎。主要包含以下內容:

  1. Razor簡介
  2. Razor語法
  3. Razor如何呈現頁面
  4. 佈局頁(Layout)

Razor簡介 Razor是微軟在ASP.NET MVC3中加入的新的檢視引擎,由於Razor簡單易用並且功能強大,迅速得到了大家的認可。但是,為了相容以前的程式碼,之前的ASPX檢視引擎(或稱為Web Forms 檢視引擎)還可以繼續使用。

需要說明的是,在一個組織良好的ASP.NET MVC專案中,Action和View是有明確的分工的。Action方法負責獲取資料並傳遞給View,但不關心如何來呈現資料。View負責如何呈現資料,但不關心資料從哪裡來,更不直接呼叫相關的業務方法來直接獲取資料。

Razor語法 在行內嵌入一個表示式

現在是 @DateTime.Now.ToString()

今年是 @DateTime.Now.Year 年

1 2 嵌入一個程式碼段 @{ string myString="hello,world"; int year=DateTime.Now.Year; } 1 2 3 4 在這個程式碼段中可以宣告變數,這些變數在這個檢視的任何位置都可以訪問,例如

@myString

今年是 @year 年

1 2 嵌入迴圈或判斷 @if (ViewBag.ProductCount == 0) { @:Out of Stock } else if (ViewBag.ProductCount == 1) { Low Stock (@ViewBag.ProductCount) } else { @ViewBag.ProductCount } 1 2 3 4 5 6 7 8 9 注意: 在邏輯語句中,’@:’可以用來直接輸出純文字 @foreach (Product p in productList) { @p.Name $@p.Price } 1 2 3 4 5 6 7 8 引用名稱空間 如果需要在檢視中引用某個名稱空間,可以

@using System.IO 1 強型別檢視 如果一個檢視被定義成強型別的,通過下面的方式來指定:

@model Razor.Models.Person 1 指定為強型別檢視後,該檢視中便可以通過@Model來接受Action傳遞過來的物件,例如:

@Model.Name @Model.Age 1 2 Action方法返回強型別檢視的方式如下

public ActionResult GetPerson() { Person person=new Person(); person.Name="Tom"; person.Age=23; return View(person); } 1 2 3 4 5 6 Razor如何呈現頁面 為了提高效能,在Razor檢視被首次被請求時,Razor檢視引擎會編譯這個檢視,將cshtml檢視編譯為C#程式碼,將vbhtml編譯為VB程式碼,這些編譯過的程式碼負責輸出HTML標籤和其他標籤給瀏覽器。這就是為什麼我們可以方便地在檢視頁面嵌入C#程式碼的原因。編譯後的程式碼大概是這個樣子的

namespace ASP { using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Web; using System.Web.Helpers; using System.Web.Security; using System.Web.UI; using System.Web.WebPages; using System.Web.Mvc; using System.Web.Mvc.Ajax; using System.Web.Mvc.Html; using System.Web.Optimization; using System.Web.Routing; public class _Page_Views_Home_Index_cshtml : System.Web.Mvc.WebViewPage<string[]> { public _Page_Views_Home_Index_cshtml() { public override void Execute() { ViewBag.Title = "Index"; WriteLiteral("\r\n\r\nThis is a list of fruit names:\r\n\r\n"); foreach (string name in Model) { WriteLiteral(" "); Write(name); WriteLiteral("\r\n"); } } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 我們可以看出來,這個類繼承自System.Web.Mvc.WebViewPage< T>,強型別的檢視應該是這麼實現的。還能看出WriteLiteral這個方法會向瀏覽器輸出HTML標籤。 至於編譯後的檔案的存放位置,在ASP.NET MVC3時,還能在Temp資料夾中找到.cs檔案,在MVC4時就不知道去哪裡了,可能新的Razor檢視引擎在編譯完成以後會刪除原始檔吧。不管怎麼樣,這個不重要,不影響Razor檢視引擎的正常工作。

佈局頁(Layout) Layout比較類似於WebForm中的母版頁,可以很輕鬆地是網站擁有相似的外觀,並且很好地提高了程式碼的內聚性。

建立佈局頁 右擊Views資料夾或Views的子資料夾,選擇 ”新增“=>”新建項“=>”MVC4 佈局頁”,然後輸入名字點選確定,佈局頁就建立好了,程式碼如下

@ViewBag.Title
@RenderBody()
1 2 3 4 5 6 7 8 9 10 11 12 13 當其它檢視使用該佈局頁時,會將程式碼嵌入到該佈局頁的 @RenderBody 處。

使用佈局頁 在檢視中指定使用的佈局頁

@{ Layout="MyLayout"; } 1 2 3 4 使用View Start檔案 一般情況下,一個佈局頁會被很多檢視使用,如果手動設定每個檢視的Layout屬性,會很麻煩,並且出現了重複程式碼,不利於重構。MVC框架在呈現一個檢視之前,會先在Views資料夾中查詢一個名叫_ViewStart.cshtml的檔案,這個檔案會被認為是檢視檔案的一部分。一般在這個檔案中指定一個預設的Layout頁面,如果檢視檔案不專門對Layout屬性賦值的話,該檢視就預設採用ViewStart檔案中的佈局頁。當然,檢視頁面可以通過以下方式來指定該檢視不使用佈局頁或使用其它佈局頁 不使用佈局頁

@{ Layout=null; } 1 2 3 使用其它佈局頁

@{ Layout="OtherLayoutPath"; } 1 2 3 如果在新建MVC專案是選擇”Internet應用程式“這個模板,那麼專案模板會在Views資料夾下包含一個名為_ViewStart.cshtml的檔案,程式碼如下

@{ Layout = "~/Views/Shared/_Layout.cshtml"; }

作者:kite___ 來源:CSDN 原文:https://blog.csdn.net/daguanjia11/article/details/44942075 版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關文章