在上回 [Day9] C# MVC View使用 - C#&AspNetCore ,我們介紹了View的操作及用法,並稍微帶了Partial View。
而這回,我們將介紹檢視元件View Compoment。
因為原本MVC5的@HTML.action
在.net core MVC中已經被移除掉了,造成Partial View會無法綁後端Controller撰寫商業邏輯。
因此,要改用View Compoment的做法。
View Compoment
檢視元件與部分檢視類似,但功能更強大。 檢視元件不會使用模型繫結(看你要不要都可以),並且只取決於呼叫它時所提供的資料。
檢視元件:
- 轉譯區塊,而不是整個回應。
- 包含控制器與檢視之間的相同關注點分離和可測試性優點。
- 可以有參數和商務邏輯。
- 它通常是從配置頁面叫用。
- 不參與控制器生命週期,無法使用Filter。
- 非 HTTP 端點的呼叫,不處理Http Request/Response ,ViewComponent是透過程式碼叫用 。
簡言之,可以撰寫商務邏輯。
有一個專門負責這View Component商務邏輯的程式碼。而你在View中也能把參數傳進View Component裡面。
View Compoment建立與使用
照微軟官方文件,View Compoment有限定的資料夾結構,避免維護困難。
黃色標記是等等會新增的檔案。
ViewComponents資料夾
必須在根目錄下新增這資料夾名稱才可以使用ViewComponents,否則底下的程式碼會出現錯誤。ShowUserInfo.cs
是以View Component為名稱命名的業務邏輯管理器。
Shared/Components資料夾
底下都是以資料夾為名的Component名稱。ShowUserInfo資料夾
為View Component名稱,底下有一個Default.cshtml,為Component的視圖。
1.首先先建立業務邏輯的檔案
ShowUserInfo.cs
1 | using Microsoft.AspNetCore.Mvc; |
IViewComponentResult
這段回應照寫就好,算是固定寫法。
在13~19行可以用Model、ViewBag、ViewData,簡單來說就是當你在寫Controller裡的action那樣。
我這邊為了求謹慎,所以回傳的是個強型別Model,因為固定規格比較好維護。
2.再來是View Component的視圖
ShowUserInfo.cshtml
1 | @model WebApplication1.Models.Customer; |
在此就把傳過來的資料顯示即可。
3.實際把View Component套用到View上。
Index.cshtml
1 | @model WebApplication1.Models.Customer; |
@await Component.InvokeAsync
用這方法傳遞參數來呼叫View Component顯示。
如此一來就完成了,在網頁上呈現。
總結
整體流程大概是這樣:
- 使用者進到View頁面
- Controller接受並回應資料給View
- View上的Razor語法呼叫ViewComponent
- 把參數再丟給ViewComponent處理
- 之後結果再回傳給整個View。
感覺這種方式真是爽快,功能又強,減少了很多Controller要顧慮的生命週期。
有獨立區塊用View Component會比用Partial View輕鬆很多。(時代的眼淚 誤~*
參考資料
https://dotblogs.com.tw/shadow/2021/04/10/174425
https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-5.0