您好,登錄后才能下訂單哦!
ASP.NET中如何使用View Component,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
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 col = new List(); 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> <h4>Top Products</h4> <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) //以異步調用為例
關于ASP.NET中如何使用View Component問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。