ASP.NET MVC 精要 - 關於Razor(4)

中斷一陣子的 ASP.NET MVC 精要系列,今天補上 Razor 的初步說明…

原文:http://www.kangting.tw/2014/03/aspnet-mvc-razor4.html

檢視頁負責網頁的組成, 如「與資料互動(3)」示範的商品展示頁,除了固定的HTML標籤,同時包含以 @ 字元開頭的Razor語法敘述構成的動態內容。Razor是檢視引擎,負責動態建構檢視頁的內容與外觀,透過其專屬的語法整合程式碼與資料,並在需要的時候結合HTML標籤輸出至瀏覽器以呈現網頁內容。考慮以下的語法:

@model IEnumerable<FirstMVC.Models.Item>
其中以@字元開始,而 @model宣告了 model 物件型態,完成model物件宣告之後,接下來於檢視中,就可以進一步透過 Razor 的 Model 關鍵字存取控制器傳送過來的資料物件,也就是上述的 rows ,而在這個範例中,rows包含了數筆書籍資料,因此透過 foreach語法逐一將其取出,並且針對每一筆資料存取其欄位內容,最後整合 <table> 標籤以表格型式輸出。 Razor 語法包含了兩種不同的格式,如果要即時取得某個特定的值,例如為了逐筆呈現所有取得的資料欄位內容,於每一個標籤中撰寫了以下的語法:
@Html.DisplayFor(item => item.Name)
這一行Razor 語法會取得此筆 item 資料的 Name 欄位內容,並結合至<td>標籤中,這是獨立的程式片段。如果某段程式碼並非要取得回傳值而是進行特定的邏輯運算,則需將其封裝於 @{…} 構成的區段中,其中的程式碼必須是合法的C# 程式碼,例如檢視檔案中的設值程式碼:
@{
    ViewBag.Title = "Products";
}
其中執行的設值運算將字串 Products 設定給 ViewBag.Title,而且最後以 ; 結束,形成一段合法的C#程式碼。如下的 foreach 區段巡覽操作亦是一種程式區塊:
@foreach (var item in Model)
{
    
}
其中大括弧區塊的內容會持續輸出,對於製作表格或是清單類型的內容相當有用。最後,你必須理解的是,這些大括弧構成的區塊執行特定程式邏輯運算,相較於程式片段的內容,並不會有任何回傳值呈現在網頁上。