从 TagHelper 调用控制器操作

Calling a Controller Action from a TagHelper

我正在使用一个简单的 CMS 来构建网站,并且需要将 'components' 注入我的页面。目前,我正在以一种相当简单的方式渲染组件,如下所示:

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

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

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