在介紹魔術前,要先跟大家展示的是魔術道具,不了解道具的魔術師,不是好的魔術師。
Blazor = Browser + Razor
Browser 是瀏覽器,而 Razor 是什麼呢?Razor 是將伺服器程式碼內嵌到網頁中的標記語法,透過 Razor 標記、C# 和 HTML 所組合成的,而我們的元件實作於 Razor 檔(.razor
),所以 Razor 可說是至關重要啊!
Razor 語法使用 @
將 HTML 檔案轉譯成 C#,Razor 會評估 C# 運算式並輸出成 HTML,只有當 @
後面接著 Razor 保留關鍵字時,它才會轉換成 Razor 特定的標記,否則只會轉換成一般 C#。
若只是想在 HTML 中使用 @
符號而不想轉成 C# 時,就需要使用第二個 @ 符號來進行跳脫字元:
1 | <p>@@文字</p> |
HTML 屬性及含有電子郵件地址的內容不會將 @
符號視為轉換字元,下列範例中的電子郵件地址並不會藉由剖析而變成 Razor 語句:
1 | <a href="mailto:mio093611@gmail.com">mio093611@gmail.com</a> |
隱式 Razor 運算式
透過將變數前面加一個 @
來轉換成 Razor 語句:
1 | <p>@DateTime.Now</p> |
除了連接 C# 關鍵字 await
與具有明確結束字元的陳述式外,隱式運算式是不能包含空格的!
1 | <p>@await DoSomethingAsync()</p> |
注意:隱式運算式不能包含 C# 泛型,因為括弧 (<>) 內的字元會解譯為 HTML 標籤,所以下列程式碼是無效的:
1 | <p>@GenericMethod<int>()</p> |
顯式 Razor 運算式
透過將 @()
內的所有內容轉換成 Razor 語句:
1 | @* 顯示 7 天前的時間 *@ |
顯式運算式可以防止 Razor 誤判電子信箱:
1 | <p>mio@(123)</p> |
以及使用 C# 泛型:
1 | <p>@(GenericMethod<int>())</p> |
Razor 程式碼區塊
Razor 程式碼區塊會以 @
開頭,並以 {}
括住表示範疇,不同於運算式,程式碼區塊內的 C# 程式碼並不會被轉譯。
1 | @{ |
也可以放置區域函式,但不建議這樣使用,明天的內容會提及區域函式該怎麼寫。
1 | @{ |
程式碼會轉譯成下列 HTML:
1 | <p>Name: <strong>Mahatma Gandhi</strong></p> |
若想在程式碼區塊中改寫回 HTML,可以直接在區塊內使用 HTML 標籤就能自動轉回 HTML:
1 | @{ |
若擔心使用 HTML 標籤會破壞 HTML 結構,可以使用 @:
來進行單行轉回 HTML:
1 | @{ |
或使用 <text>
標籤來進行多行轉換:
1 | @{ |
所以你也可以這樣寫:
1 | @{ |
將 HTML 轉成 C#,再把 C# 轉回 HTML,再轉轉轉轉轉都是合法的語句,但非常不建議這樣做。
註解
有兩種方式可以在 razor 檔案中註解:
- 轉成 C# 在使用 C# 的註解方式。
1 | @{ |
- 透過
@* *@
來劃定註解,使 Razor 轉譯時會移除註解內容。
1 | @* *@ |