亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

解讀ASP.NET 5 & MVC6系列教程(14):View Component

2024-07-10 13:30:51
字體:
來源:轉載
供稿:網友

在之前的MVC中,我們經常需要類似一種小部件的功能,通常我們都是使用Partial View來實現,因為MVC中沒有類似Web Forms中的WebControl的功能。但在MVC6中,這一功能得到了極大的改善。新版MVC6中,提供了一種叫做View Component的功能。

你可以將View Component看做是一個mini的Controller——它只負責渲染一小部分內容,而非全部響應,所有Partial View能解決的問題,你都可以使用View Component來解決,比如:動態導航菜單、Tag標簽、登錄窗口、購物車、最近閱讀文章等等。

View Component包含2個部分,一部分是類(繼承于ViewComponent),另外一個是Razor視圖(和普通的View視圖一樣)。就像新版MVC中的Controller一樣,ViewComponent也可以使POCO的(即不繼承ViewComponent類,但類名以ViewComponent結尾)。

View Component的創建

目前,View Component類的創建方式有如下三種:

直接繼承于ViewComponent給類加上ViewComponent特性,或繼承于帶有ViewComponent特性的類創建一個類,類名以ViewComponent結尾

和Controller一樣,View Component必須是public的,不能嵌套,不能是抽象類。

舉例來說,我們創建一個View Component,類名為TopListViewComponent,代碼如下:

public class TopListViewComponent : ViewComponent{ private readonly ApplicationDbContext db; public TopListViewComponent(ApplicationDbContext context) { db = context; } public IViewComponentResult Invoke(int categoryId, int topN) { List<string> col = new List<string>(); var items = db.TodoItems.Where(x => x.IsDone == false &&      x.categoryId == categoryId).Take(topN); return View(items); }}

上述類,也可以定義成如下這樣:

[ViewComponent(Name = "TopList")]public class TopWidget{ // 其它類似}

通過在TopWidget類上定義一個名稱為TopList的ViewComponent特性,其效果和定義TopListViewComponent類一樣,系統在查找的時候,都會認可,并且在其構造函數中通過依賴注入功能提示構造函數中參數的類型實例。

Invoke方法是一個約定方法,可以傳入任意數量的參數,系統也支持InvokeAsync方法實現異步功能。

View Component的視圖文件創建

以在ProductController的視圖里調用View Component為例,我們需要在Views/Product文件夾下創建一個名稱為Components的文件夾(該文件夾名稱必須為Components)。

然后在Views/Product/Components文件夾下創建一個名稱為TopList 的文件夾(該文件夾名稱必須和View Component名稱一致,即必須是TopList)。

Views/Product/Components/TopList文件夾下,創建一個Default.cshtml視圖文件,并添加如下標記:

@model IEnumerable<BookStore.Models.ProductItem><h3>Top Products</h3><ul> @foreach (var todo in Model) { <li>@todo.Title</li> }</ul>

如果再View Component中,沒有指定視圖的名稱,將默認為Default.cshtml視圖。

至此,該View Component就創建好了,你可以在Views/Product/index.cshtml視圖中的任意位置調用該View Component,比如:

 <div class="col-md-4"> @Component.Invoke("TopList", 1, 10)  </div>

如果在上述TopListViewComponent中定義的是異步方法InvokeAsync的話,則可以使用@await Component.InvokeAsync()方法來調用,這兩個方法的第一個參數都是TopListViewComponent的名稱,剩余的參數則是在TopListViewComponent類中定義的方法參數。

注意:一般來說,View Component的視圖文件都是添加在Views/Shared文件夾的,因為一般來說ViewComponent不會特定于某個Controller。

使用自定義視圖文件

一般來說,如果要使用自定義文件,我們需要在Invoke的方法返回返回值的時候來指定視圖的名稱,示例如下:

 

return View("TopN", items);

那么,就需要創建一個Views/Product/Components/TopN.cshtml文件,而使用的時候則無需更改,還是指定原來的View Component名稱即可,比如:

 

@await Component.InvokeAsync("TopList", 1, 10) //以異步調用為例

總結

一般來說,建議在通用的功能上使用View Component的功能,這樣所有的視圖文件都可以放在Views/Shared文件夾了。

 


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品黄页免费高清在线观看| 久久久久久久一区二区| 久久国产精品视频| 国产视频久久网| 欧美精品激情在线观看| 日韩黄色在线免费观看| 日韩精品免费在线| 亚洲欧美日韩天堂一区二区| 欧美精品九九久久| 久久久免费精品| 欧美激情视频播放| 亚洲欧洲免费视频| 国产精品亚洲аv天堂网| 精品人伦一区二区三区蜜桃网站| 国产一区二区三区在线| 国产在线精品自拍| 国产拍精品一二三| 日韩亚洲一区二区| 国产丝袜精品第一页| 国产精品老女人精品视频| 国产精品久久久久久久app| 日本a级片电影一区二区| 日av在线播放中文不卡| 欧美精品一区在线播放| 国产精品在线看| 久久亚洲精品毛片| 亚洲人成毛片在线播放| 欧美日韩国产在线| 91精品成人久久| 欧美精品激情在线观看| 成人免费高清完整版在线观看| 久久国产精品99国产精| 久久中文字幕国产| 永久免费毛片在线播放不卡| 成人女保姆的销魂服务| 正在播放亚洲1区| 欧美一级黑人aaaaaaa做受| 亚洲色图13p| 亚洲精品99久久久久| 亚洲国产成人精品电影| 97香蕉久久超级碰碰高清版| 91精品久久久久久| 精品国产网站地址| 九九久久综合网站| 日韩av有码在线| 欧美国产日韩一区二区三区| 国产精品丝袜高跟| 91亚洲精品久久久久久久久久久久| 亚洲国产欧美一区二区丝袜黑人| 中日韩美女免费视频网站在线观看| 欧美丝袜美女中出在线| 日韩免费观看高清| 欧美精品九九久久| 777国产偷窥盗摄精品视频| 大量国产精品视频| 永久免费精品影视网站| 在线视频日韩精品| 日韩美女视频免费看| 欧美性猛交xxxx免费看| 91精品久久久久| 夜夜嗨av色一区二区不卡| 欧美裸身视频免费观看| 国产精品av电影| 日韩电影中文字幕一区| 国产香蕉97碰碰久久人人| 啊v视频在线一区二区三区| 日韩在线激情视频| 日韩美女免费视频| 国产精品免费久久久久久| 欧美午夜精品久久久久久浪潮| 2020国产精品视频| 国产精品免费久久久| 日韩精品高清在线观看| 精品欧美aⅴ在线网站| 久久视频国产精品免费视频在线| 国产精品盗摄久久久| 国产精品久久久| 国产精品久久久久不卡| 国产日韩在线看| 欧美激情网友自拍| 国产一区二区三区中文| 91网站免费看| 日本在线观看天堂男亚洲| 福利视频一区二区| 欧美中文在线观看| 精品偷拍一区二区三区在线看| 欧美在线欧美在线| 色偷偷91综合久久噜噜| 国产不卡av在线| 午夜伦理精品一区| 欧美精品一区三区| 精品国产一区二区三区四区在线观看| 欧美日韩在线视频首页| 日韩av在线免播放器| 欧美劲爆第一页| 黑人巨大精品欧美一区二区免费| 97精品视频在线播放| 中文字幕无线精品亚洲乱码一区| 欧美性猛xxx| 国产成人精品在线观看| 欧美激情在线有限公司| 日韩精品有码在线观看| 久久久久免费精品国产| 日韩在线视频一区| 国产欧美亚洲精品| 国产欧美在线观看| 国产精品嫩草影院一区二区| xvideos亚洲| 久久久久久久久久久久av| 欧美放荡办公室videos4k| 在线观看欧美www| 中文字幕欧美视频在线| 精品国内亚洲在观看18黄| 欧美在线亚洲在线| 国产欧美精品在线播放| 欧美性视频精品| 日韩av三级在线观看| 国内精品400部情侣激情| 国产精品精品一区二区三区午夜版| 亚洲国产精品久久| 国产成+人+综合+亚洲欧洲| 欧美三级xxx| 亚洲а∨天堂久久精品9966| 色综合老司机第九色激情| 欧美人与性动交| 国产成人精品日本亚洲| 亚洲自拍偷拍视频| 亚洲美女av在线| 久久精品91久久久久久再现| 日韩欧美高清在线视频| 国产成人精品在线视频| 亚洲欧美变态国产另类| 成人国产在线视频| 亚洲丝袜在线视频| 久久久精品国产网站| 亚洲成av人乱码色午夜| 亚洲社区在线观看| 国产在线一区二区三区| 亚洲级视频在线观看免费1级| 2021久久精品国产99国产精品| 日韩女优在线播放| 搡老女人一区二区三区视频tv| 国产欧美精品久久久| 91香蕉嫩草神马影院在线观看| 不卡av在线播放| 欧美高清视频在线观看| 亚洲欧美另类中文字幕| 亚洲精品自拍第一页| www.日韩不卡电影av| 中文字幕一区日韩电影| 久久精品国产精品亚洲| 亚洲成人精品久久| 国产做受69高潮| 亚洲大胆人体av| 国产成人高潮免费观看精品| 国产精品羞羞答答| 国产日韩亚洲欧美| 欧美成aaa人片在线观看蜜臀| 97香蕉超级碰碰久久免费的优势| 日韩在线观看免费高清完整版| 日本亚洲欧美三级| 亚洲激情视频网站| 综合av色偷偷网| 91国自产精品中文字幕亚洲|