我使用简单的CMS构建网站,并要求注入“组件”。进入我的页面。目前,我正在以相当简单的方式呈现组件,如下所示:
<latest-blog-posts limit="3" order-by="date asc"/>
然后,我想使用 TagHelpers 来填写真实内容。有没有办法在ASP.NET Core中调用控制器操作,并用生成的视图替换调用标记。我的感觉是我需要考虑使用output.WriteTo(TextWriter writer, HtmlEncoder encoder)
,但我仍然坚持如何将Action的响应提供给作者。
答案 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)。