2017-09-26 81 views
0

我正在使用簡單的CMS來構建網站,並且需要將「組件」注入到我的頁面中。目前,我在一個相當簡單的方式呈現出組件,如下:從TagHelper調用控制器操作

<latest-blog-posts limit="3" order-by="date asc"/>

然後我想用TagHelpers填寫真實的內容。有沒有辦法在ASP.NET Core中調用控制器動作,並將調用標籤替換爲生成的視圖。我的感覺是,我需要考慮使用output.WriteTo(TextWriter writer, HtmlEncoder encoder),但我一直在堅持如何將Action的響應反饋給作者。

+0

你爲什麼想從標籤助手調用操作方法?你想達到什麼目的? – Shyju

+0

我想要做的事情使我的觀點和模型儘可能簡單。我收到包含屬性基本集合的_potential_組件集合。我可以很容易地將它們作爲上面提到的標籤進行渲染,但實際上,每個組件都可能很複雜。在這個例子中,我需要調用CMS並檢索最近的三篇博文。我對後端代碼中的HTML編輯有內置的仇恨,並決定用某種視圖管理控制器中的每個組件會使我在整個應用程序中具有更大的靈活性和可重用性。 – mnield

+0

應使用標記助手來呈現內容,而不是向服務器發送更多請求。你能通過使用部分視圖和子操作來實現你想要的嗎? – Fran

回答

1

您正在尋找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)

相關問題