iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
1
Modern Web

大內魔術 Blazor - 誰說前端一定要寫JS系列 第 3

魔術道具 - Razor 介紹

  • 分享至 

  • xImage
  •  

在介紹魔術前,要先跟大家展示的是魔術道具,不了解道具的魔術師,不是好的魔術師。

Blazor = Browser + Razor

Browser 是瀏覽器,而 Razor 是什麼呢?Razor 是將伺服器程式碼內嵌到網頁中的標記語法,透過 Razor 標記、C# 和 HTML 所組合成的,而我們的元件實作於 Razor 檔(.razor),所以 Razor 可說是至關重要啊!

Razor 語法使用 @ 將 HTML 檔案轉譯成 C#,Razor 會評估 C# 運算式並輸出成 HTML,只有當 @ 後面接著 Razor 保留關鍵字時,它才會轉換成 Razor 特定的標記,否則只會轉換成一般 C#。

若只是想在 HTML 中使用 @ 符號而不想轉成 C# 時,就需要使用第二個 @ 符號來進行跳脫字元:

<p>@@文字</p>

HTML 屬性及含有電子郵件地址的內容不會將 @ 符號視為轉換字元,下列範例中的電子郵件地址並不會藉由剖析而變成 Razor 語句:

<a href="mailto:mio093611@gmail.com">mio093611@gmail.com</a>

隱式 Razor 運算式

透過將變數前面加一個 @ 來轉換成 Razor 語句:

<p>@DateTime.Now</p>

除了連接 C# 關鍵字 await 與具有明確結束字元的陳述式外,隱式運算式是不能包含空格的!

<p>@await DoSomethingAsync()</p>
<p>@DoSomething(1, 2)</p>

注意:隱式運算式不能包含 C# 泛型,因為括弧 (<>) 內的字元會解譯為 HTML 標籤,所以下列程式碼是無效的:

<p>@GenericMethod<int>()</p>

顯式 Razor 運算式

透過將 @() 內的所有內容轉換成 Razor 語句:

@* 顯示 7 天前的時間 *@
<p>@(DateTime.Now - TimeSpan.FromDays(7))</p>

顯式運算式可以防止 Razor 誤判電子信箱:

<p>mio@(123)</p>

以及使用 C# 泛型:

<p>@(GenericMethod<int>())</p>

Razor 程式碼區塊

Razor 程式碼區塊會以 @ 開頭,並以 {} 括住表示範疇,不同於運算式,程式碼區塊內的 C# 程式碼並不會被轉譯。

@{
    var mio = new Person("Joe", 26);
}

<p>Age@(mio.Age)</p>

也可以放置區域函式,但不建議這樣使用,明天的內容會提及區域函式該怎麼寫。

@{
    void RenderName(string name)
    {
        <p>Name: <strong>@name</strong></p>
    }

    RenderName("Mahatma Gandhi");
    RenderName("Martin Luther King, Jr.");
}

程式碼會轉譯成下列 HTML:

<p>Name: <strong>Mahatma Gandhi</strong></p>
<p>Name: <strong>Martin Luther King, Jr.</strong></p>

若想在程式碼區塊中改寫回 HTML,可以直接在區塊內使用 HTML 標籤就能自動轉回 HTML:

@{
    var inCSharp = true;
    <p>Now in HTML, was in C# @inCSharp</p>
}

若擔心使用 HTML 標籤會破壞 HTML 結構,可以使用 @: 來進行單行轉回 HTML:

@{
    var inCSharp = true;
    @:Now in HTML, was in C# @inCSharp
}

或使用 <text> 標籤來進行多行轉換:

@{
    var inCSharp = true;
    <text>
        Now in HTML, was in C# @inCSharp
    </text>
}

所以你也可以這樣寫:

@{
    var name = "Mio";
    <text>
        <p>這裡的名稱是 @name</p>
        @{
            name = "Rascal";
            @: 這裡的名稱是 @name, 且沒有 HTML 標籤
            <text>
                <p>這裡的名稱是 @name, 並被 p 包住</p>
                @{
                    name = "Kabimon";
                    <text>
                       <p>這裡的名稱是 @name, 是最底層的 HTML !!!</p>
                    </text>
                }
            </text>
        }
    </text>
}

將 HTML 轉成 C#,再把 C# 轉回 HTML,再轉轉轉轉轉都是合法的語句,但非常不建議這樣做。

註解

有兩種方式可以在 razor 檔案中註解:

  1. 轉成 C# 在使用 C# 的註解方式。
@{
    /* C# comment */
    // Another C# comment
}
  1. 透過 @* *@ 來劃定註解,使 Razor 轉譯時會移除註解內容。
@*  *@

參考資料
Razor ASP.NET Core 的語法參考


上一篇
舞台建造與介紹
下一篇
魔術道具 - Razor 指示詞
系列文
大內魔術 Blazor - 誰說前端一定要寫JS30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言