您正在尋找view components。它們在功能上與MVC 5和之前的子操作類似。
public class LatestBlogPostsViewComponent : ViewComponent
{
private readonly BlogDbContext db;
public LatestBlogPostsViewComponent(BlogDbContext context)
{
db = context;
}
public async Task<IViewComponentResult> InvokeAsync(int limit, string orderBy)
{
var posts = // get latest posts;
return View(posts);
}
}
接下來,創建視圖Views/Shared/Components/LatestBlogPosts.cshtml
並添加您想使您的最新博客文章列表的代碼。您的視圖的模型將是視圖組件返回的posts
的類型。
最後,在你想要的最新博客文章要呈現的視圖或佈局調用使用組件:
@await Component.InvokeAsync("LatestBlogPosts", new { limit = 3, orderBy = "date asc" })
或者,如果你喜歡的TagHelper語法:
<vc:latest-blog-posts limit="3" orderBy="date asc"></vc:latest-blog-posts>
的後一種方法需要你register the view component(s)。
你爲什麼想從標籤助手調用操作方法?你想達到什麼目的? – Shyju
我想要做的事情使我的觀點和模型儘可能簡單。我收到包含屬性基本集合的_potential_組件集合。我可以很容易地將它們作爲上面提到的標籤進行渲染,但實際上,每個組件都可能很複雜。在這個例子中,我需要調用CMS並檢索最近的三篇博文。我對後端代碼中的HTML編輯有內置的仇恨,並決定用某種視圖管理控制器中的每個組件會使我在整個應用程序中具有更大的靈活性和可重用性。 – mnield
應使用標記助手來呈現內容,而不是向服務器發送更多請求。你能通過使用部分視圖和子操作來實現你想要的嗎? – Fran