- Published on
ASP.NET MVC - View (一)
Razor 語法
Razor 不算是一個程式語言,它是一種撰寫風格
- 直接輸出程式碼

CodeInline用在一行程式碼 (一行的陳述式)

CodeBlock用在多行程式碼,裡面要加分號結尾

- 在
CodeBlock裡面輸出Html,在每一行開頭加@:

- 除了在開頭加
@:之外還可以用<tag>,而且不管<tag>有沒有意義,被包起來就會輸出成Html而且tag會被輸出

<text>是Razor專屬的語法,tag並不會被輸出,所以可以用來精準的控制 Html

- 如果要輸出
@,需要使用@當跳脫字元

- 為了避免
xss攻擊,預設所有輸出的內容都會HtmlEncode,如果要原封不動的輸出可以用@Html.Raw( )

Layout 主版頁面
在 MVC 的專案範本中有一個預設的 /View/_ViewStart.cshtml 檔案,個檔案會在任何 View 被載入前先被載入

而檔案的內容只有一行,定義了 layout (主版頁面) 的檔案路徑

在 /View/ 的每一層內都可以有這個檔案 內層的設定會蓋掉外層的設定 想要設定一些頁面的屬性時可以寫在這裡
MVC 的頁面載入順序為
/View/_ViewStart.cshtml- 和 Contorller 同名的
View 子目錄下的頁面 /View/Shard/_Layout.cshtml
所以如果在頁面裡面把資料寫入 ViewData,在 Layout 裡面是可以讀到的,不過,如果相反的話,因為載入順序的關係,就不行了
在 Layout 裡面主要有兩個部分

@RenderBody() 為預設坑洞,是 View 的主要內容,@RenderSection() 為具名坑洞
以上圖為例,定義了一個名稱為 featured 的坑洞,第二個 required 是指有沒有必要一定出現,如果是 true 的話,又找不到相對應可填入的 View 時就會出錯

在 View 裡用 @section 這個特殊的寫法來對應 Layout 的 @RenderSection,而在 View 裡面除了用 @section 定義的範圍之外的內容,全部都會被填入 @RenderBody
