从TagHelper

时间:2017-09-26 15:32:45

标签: asp.net-core asp.net-core-tag-helpers

我使用简单的CMS构建网站,并要求注入“组件”。进入我的页面。目前,我正在以相当简单的方式呈现组件,如下所示:

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

然后,我想使用 TagHelpers 来填写真实内容。有没有办法在ASP.NET Core中调用控制器操作,并用生成的视图替换调用标记。我的感觉是我需要考虑使用output.WriteTo(TextWriter writer, HtmlEncoder encoder),但我仍然坚持如何将Action的响应提供给作者。

1 个答案:

答案 0 :(得分: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)