一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET Core MVC學習之視圖組件(View Component)

ASP.NET Core MVC學習之視圖組件(View Component)

2020-06-17 15:33卡西莫多_Ruby ASP.NET教程

這篇文章主要給大家介紹了關于ASP.NET Core MVC學習之視圖組件(View Component)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用ASP.NET Core MVC具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

1.視圖組件介紹

  視圖組件是 ASP.NET Core MVC 的新特性,類似于局部視圖,但它更強大。視圖組件不使用模型綁定,并且僅依賴于調用它時所提供的數據。

  視圖組件特點:

    呈塊狀,而不是整個響應

    包括在控制器和視圖之間發現的相同的關注點和可測試性優點

    可以擁有參數和業務邏輯

    通常從布局頁面調用

  視圖組件可以用在任何需要重復邏輯且對局部視圖來說過于復雜的情況,例如:

    動態導航菜單

    標簽云(需要查詢數據庫)

    登錄面板

    購物車

    最近發表的文章

    典型博客上的側邊欄內容

    將在每個頁面上呈現的登錄面板,根據用戶的登錄狀態顯示注銷或者登錄的鏈接

  視圖組件有兩部分組成,類(通常派生自 ViewComponent)和它返回的結果(通常是一個視圖)。與控制器一樣,視圖組件可以是POCO,但大多數是利用 ViewComponent 派生的方法和屬性。 

2.創建視圖組件

  (1)視圖組件類

  一個視圖組件類通常可以通過以下任一方式創建:

    派生自ViewComponent

    使用 [ViewComponent] 屬性裝飾類,或從具有 [ViewComponent] 屬性的類派生

    創建一個名稱后綴為 ViewComponent 結尾的類

  像控制器一樣,視圖組件必須是 public ,非嵌套和非抽象類。視圖組件名稱是刪除了 ViewComponent 后綴的類名,可以使用 ViewComponentAttribute.Name 屬性顯示指定。

  視圖組件類優點:

    完全支持構造函數依賴注入

    不參與控制器生命周期,這意味著不能在視圖組件中使用過濾器

  (2) 視圖組件方法

  視圖組件在 InvokeAsync 方法中定義其邏輯,并返回 IViewComponentResult 。參數直接來自視圖組件的調用,而不是來自模型綁定。視圖組件從不直接處理請求。通常,視圖組件通過調用 View 方法初始化模型并將其傳遞給視圖。總之,視圖組件有以下特點:

    定義一個 InvokeAsync 方法并返回 IViewComponentResult。

    通常通過調用  ViewComponent View 方法初始化模型并將其傳遞給視圖。

    參數來自調用方法,而不是 HTTP,沒有模型綁定。

    不能直接作為 HTTP 端點訪問,它是從你的代碼(通常在視圖中)調用的。視圖組件不處理請求。

    在簽名上重載,而不是當前 HTTP 請求的任何細節。

  (3) 視圖搜索路徑

  運行時在以下路徑搜索視圖:

  Views/<controller_name>/Components/<view_component_name>/<view_name>

  Views/Shared/Components/<view_component_name>/<view_name>

  視圖組件的默認視圖名稱是 Default,這意味著你的視圖文件通常名為 Default.cshtml。你可以在創建視圖組件結果或調用 View 方法時指定其他的視圖名稱。

3.調用視圖組件

    要使用視圖組件,請從視圖中調用  @Component.InvokeAsync("視圖組件名稱",<匿名參數>)。參數將傳遞到 InvokeAsync 方法。如下:

?
1
@await Component.InvokeAsync("TopicRankList",new { days=5})

  視圖組件通常從視圖中調用,但也可以從控制器方法中直接調用,雖然視圖組件不像控制器那樣定義終結點。

        public ActionResult Index()
        {
            return ViewComponent("TopicRankList", new { days = 5 });
        }
 

4.實戰視圖組件

  添加一個 ViewCompoents 文件夾,然后添加 UserRankList類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class UserRankList : ViewComponent
 {
  private readonly DataContext _db;
  private IMemoryCache _memoryCache;
  private string cacheKey = "topicrank";
 
  public UserRankList(DataContext db, IMemoryCache memoryCache)
  {
   _db = db;
   _memoryCache = memoryCache;
  }
 
  public IViewComponentResult Invoke(int days)
  {
   var items = new List<User>();
   if (!_memoryCache.TryGetValue(cacheKey, out items))
   {
    items = GetRankUsers(10, days);
   }
   _memoryCache.Set(cacheKey,items,TimeSpan.FromMinutes(10));
   return View(items);
  }
 
  private List<User> GetRankUsers(int top, int days)
  {
   return _db.User.OrderBy(o => o.Id).Take(top).ToList();
  }
 }

  視圖組件類可以在項目的任何文件夾中。 [ViewComponent] 特性可以更改用于引用視圖組件的名稱,例如,可以命名類為 XYZ,并應用 [ViewComponent] 特性:

?
1
2
[ViewComponent(Name="UserRankTop")]
public calss XYZ:ViewComponent

  Invoke 方法返回列表,然后創建視圖組件視圖。

  創建 View/Shared/Components 文件夾。這個文件夾必須名為 Components。然后在里面創建 UserRankList 文件夾,添加 Default.cshtml 視圖:

?
1
2
3
4
5
6
7
8
9
@model List<MVCTest.Models.User>
 
<h2>user</h2>
<div class="list-group">
 @foreach (var item in Model)
 {
  <label>@item.Name</label>
 }
</div>

  最后在視圖中調用: @await Component.InvokeAsync("UserRankList", new { days=5})

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/afei-24/p/11317885.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本高清在线精品一区二区三区 | 免费看黄色片网站 | 日本福利视频网站 | 国产福利你懂的 | 精品无码国产污污污免费网站2 | 国产精品乱码高清在线观看 | 香蕉久久夜色精品国产尤物 | 欧美日韩国产亚洲一区二区 | 爽好舒服快想要免费看 | 亚洲精品卡一卡2卡3卡4卡 | 99r视频在线观看 | 欧美一级特黄aaa大片 | 王淑兰与铁柱全文免费阅读 | 青青青国产精品国产精品久久久久 | 亚洲区一| 亚洲视频一区二区在线观看 | 极品妖艳许清赵丽全文免费阅读 | 国产区香蕉精品系列在线观看不卡 | sao虎在线精品永久 s0e一923春菜花在线播放 | 亚洲精品第三页 | 国产精品亚洲精品观看不卡 | 亚洲美女aⅴ久久久91 | 小黄鸭YELLOWDUCK7596 | 白丝捆绑vk | 国产成人v爽在线免播放观看 | 成人伊在线影院 | 我与恶魔的h生活ova | 女海盗斯蒂内塔的复仇2免费观看 | 美女天天色 | 欧美xxoo做爰猛烈视频 | jiujiure精品| 肉文小说 | 好大好爽好舒服视频 | 四虎影视4hu最新地址在线884 | 公妇仑乱在线观看 | 国产精品热久久毛片 | 超级乱淫伦小说1女多男 | 日本伊人久久 | 国产香蕉视频在线观看 | 国产精品边做边接电话在线观看 | 841995论坛网站2022年 |