前言
相信對於在 MVC 架構下, view 可以使用 Razor (使用 @ 寫法),已經是再熟悉不過了,所以就來稍微複習一下,畢竟對於本系列來說,若使用到 ASP .NET Core MVC 架構,那就會需要知道怎麼使用!
分享主軸
Razor 是一種標記語法,將基於 .NET 的程式碼嵌入到頁面中,允許將 HTML 與 C# 程式碼混合,以動態生成,發送到客戶端瀏覽器的內容(名為 .cshtml),如下範例
@{
var message = "Hello, World!";
}
<p>Message : @message</p>
<p>Date : @DateTime.Now</p>
得出結果
`
Message : Hello, World!
Date : 會印出現在時間
`
@if (DateTime.Now.Hour < 12)
{
<p>Good morning!</p>
}
else
{
<p>Good afternoon!</p>
}
@for (int i = 0; i < 5; i++)
{
<p>Number: @i</p>
}
是一種特殊的頁面,嵌入在其他頁面中,並生成 HTML 輸出,這些輸出會被渲染到父視圖中。Partial Views 通常以 _ 開頭區分
使用時機
有多種方法可以在視圖中渲染 Partial Views
@Html.Partial("_PartialViewName", Model)
@await Html.PartialAsync("_PartialViewName", Model)
@{ Html.RenderPartial("_PartialViewName", Model); }
@{ await Html.RenderPartialAsync("_PartialViewName", Model); }
簡單來說你可否賦值
@{
var partialContent = Html.Partial("_PartialViewName", Model);
}
<div>
@partialContent
</div>
或是
@model YourNamespace.ParentModel
@{
var partialContent = Html.Partial("_PartialViewName", Model.PartialModel);
}
<h1>Main View</h1>
<div>
@partialContent
</div>
而 Html.RenderPartial 和 Html.RenderPartialAsync 無法做到這件事情
上述也可以使用 Tag Helper 寫法來做到一樣效果
<!-- 使用相對路徑包含部分視圖 -->
<partial name="_PartialName" />
<!-- 使用絕對路徑包含部分視圖 -->
<partial name="/Views/Folder/_PartialName.cshtml" />
在 HTML 標籤中嵌入後端邏輯,從而使得 Razor 頁面更加簡潔和易讀
1. Anchor Tag Helper: 用於生成超連結的 URL(通過在 HTML 標籤中添加特定的屬性來動態生成 href 屬性),以 asp- 開頭,常用屬性如下
<a asp-controller="Home" asp-action="Index">Home</a>
結果
<a href="/Home/Index">Home</a>
2. Form Tag Helper: 用於生成表單
<form asp-controller="Account" asp-action="Login">
<!-- 表單內容 -->
</form>
3. Input Tag Helper: 用於生成輸入框
<input asp-for="UserName" />
結果
<input type="text" id="UserName" name="UserName" />
今日結語
此架構下的頁面,後端語法可以融合在裡面,解決複雜邏輯,但這樣有時候過於複雜就會造成負擔,使用上還是得思考一下,不過撇開這些不說,有了 Razor,是真的方便許多
參考教學文章
https://www.learnrazorpages.com/razor-pages/tag-helpers
https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/mvc/views/view-components.md