如何在ASP.NET Core中使用ViewComponent
前言
在之前的開發(fā)過程中,我們對(duì)于應(yīng)用或者說使用一些小的組件,通常使用分布頁(partial view),再往前在Web Form中我們會(huì)進(jìn)行應(yīng)用WEB Control
,好吧提及一個(gè)關(guān)鍵性代碼TagPrefix:TagName
,通過這種的標(biāo)記我們便可以在我們web form
中進(jìn)行引入我們的組件,當(dāng)然自從.NET MVC之后呢,就已經(jīng)沒有了WebControl
,而對(duì)于.NET Core后,又多了一個(gè)特性ViewComponent
。
對(duì)于ViewComponent
看起來它類似于小的控制器,而對(duì)于我們小的組件或者小部分通用型功能,可通過ViewComponent
進(jìn)行實(shí)現(xiàn),比如說留言欄、菜單等等。
ViewComponent
是由兩部分組成,一部分是類(通常該類集成與ViewComponent),而另外一部分是視圖(Razor和普通的View一樣),當(dāng)然ViewComponent
同樣也支持POCO,不繼承ViewComponent
,但類名以ViewComponent
結(jié)尾。
自定義一個(gè)組件
創(chuàng)建ViewComponent的方式有三種,如下所示:
- 繼承自ViewComponent
- 使用ViewComponent特性
- 創(chuàng)建一個(gè)類,以ViewComponent結(jié)尾
需要注意的是View Component必須是公共的(public),非嵌套,非抽象類。
對(duì)于View Component
我們有了一個(gè)基本的認(rèn)識(shí),下面的話創(chuàng)建一個(gè)ButtonViewComponent
示例,作為我們的參考:
using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; namespace ViewComponentDemo.ViewComponents { public class ButtonViewComponent : ViewComponent { public async Task<IViewComponentResult> InvokeAsync() { return View(); } } }
在視圖頁面中調(diào)用該組件:
@await Component.InvokeAsync("Button")
對(duì)于ViewComponent
同樣也是跟Controller
一樣,進(jìn)行通過我們服務(wù)端特性進(jìn)行視圖操作,再或者說渲染,比如下面我們要傳遞參數(shù),進(jìn)行修改我們的Button
的樣式:
我們修改一下原方法,同時(shí)增加一個(gè)Enum類型,進(jìn)行樣式的選擇
@await Component.InvokeAsync("Button",ButtonType.Success)
public async Task<IViewComponentResult> InvokeAsync(ButtonType type = ButtonType.Success) { ViewBag.Type = type; //return View("name",model);//允許強(qiáng)類型 return View(); } public enum ButtonType { Default, Primary, Success, Info, Warning, Danger, Link }
ViewComponent特性
因?yàn)樵谖覀兊囊晥D關(guān)系綁定中,我們更多的是依賴于命名式綁定,而當(dāng)我們組件的命名與類命名不一致時(shí),會(huì)導(dǎo)致我們搜索不到相關(guān)的視圖,當(dāng)然我們可能會(huì)在使用過程中對(duì)其應(yīng)用不一樣的Name
,而對(duì)于這種情況,我們可以使用ViewCompoentAttribute
進(jìn)行標(biāo)記,通過這種方式我們可進(jìn)行視圖的綁定,如下所示:
[ViewComponent(Name ="Button")] public class ButtonTest : ViewComponent { public async Task<IViewComponentResult> InvokeAsync(ButtonType type = ButtonType.Success) { ViewBag.Type = type; return View(); } }
如上代碼雖然ButtonTest
的命名引發(fā)了視圖綁定失?。ú荒苓M(jìn)行使用Button),而我們將其加入一個(gè)標(biāo)記,將Name命名為Button
這樣彌補(bǔ)了我們命名的不一致行為。
Taghelper方式
通過@addTagHelper
指定進(jìn)行注冊(cè)包含組件的程序集,組件位于ViewComponentDemo
程序集中
@addTagHelper *, ViewComponentDemo
切記這種方式有一個(gè)弊端,參數(shù)不是可選性參數(shù),也就是你必須把每一個(gè)參數(shù)都進(jìn)行顯示的調(diào)用一下,否則將導(dǎo)致搜索不到.
<vc:button type="@ButtonType.Success"></vc:button>
在如上代碼中type為我們的方法參數(shù)。
Reference
Demo:https://github.com/hueifeng/BlogSample/tree/master/src/ViewComponentDemo
以上就是如何在ASP.NET Core中使用ViewComponent的詳細(xì)內(nèi)容,更多關(guān)于ASP.NET Core中使用ViewComponent的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 發(fā)布asp.net core時(shí)如何修改ASPNETCORE_ENVIRONMENT環(huán)境變量
- ASP.NET Core擴(kuò)展庫(kù)之Http日志的使用詳解
- ASP.NET Core自動(dòng)生成小寫破折號(hào)路由的實(shí)現(xiàn)方法
- 如何在ASP.NET Core中使用HttpClientFactory
- 如何在ASP.Net Core中使用Serilog
- ASP.NET Core 5中如何生成PDF文檔
- ASP.NET Core擴(kuò)展庫(kù)之實(shí)體映射使用詳解
- 詳解如何在ASP.Net Core中實(shí)現(xiàn)健康檢查
相關(guān)文章
ASP.NET生成eurl.axd Http異常錯(cuò)誤的處理方法
在IIS6中同時(shí)啟用了ASP.NET 2.0 和 ASP.NET 4.0 后,網(wǎng)站程序可能會(huì)出現(xiàn)如下錯(cuò)誤:“ System.Web.HttpException: Path ‘//eurl.axd/‘ was not found. ”2011-05-05詳解ASP.NET Core3.0 配置的Options模式
這篇文章主要介紹了詳解ASP.NET Core3.0 配置的Options模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08仿vs實(shí)現(xiàn)WPF好看的進(jìn)度條
由于WPF自帶的進(jìn)度條其實(shí)不怎么好看,而且沒啥視覺效果。下面給大家分享的是仿VS的進(jìn)度條效果的代碼,有需要的小伙伴可以參考下。2015-06-06ASP.NET網(wǎng)站實(shí)時(shí)顯示時(shí)間的方法
這篇文章主要介紹了ASP.NET網(wǎng)站實(shí)時(shí)顯示時(shí)間的方法,主要通過AJAX控件來實(shí)現(xiàn)該功能,是非常具有實(shí)用價(jià)值的技巧,需要的朋友可以參考下2014-11-11ASP.NET Core中如何實(shí)現(xiàn)重定向詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core中如何實(shí)現(xiàn)重定向的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01.NET讀寫Excel工具Spire.Xls使用 對(duì)數(shù)據(jù)操作與控制(4)
這篇文章主要為大家詳細(xì)介紹了.NET讀寫Excel工具Spire.Xls使用,對(duì)數(shù)據(jù)操作與控制的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection 集群場(chǎng)景)下篇
這篇文章主要為大家再一次介紹了ASP.NET Core 數(shù)據(jù)保護(hù)(Data Protection),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09WebService出現(xiàn)"因 URL 意外地以 結(jié)束,請(qǐng)求格式無法識(shí)別"的解決方法
因 URL 意外地以“/GetReceivedInvoices”結(jié)束,請(qǐng)求格式無法識(shí)別。2009-01-01