ViewComponent TagHelpers 不渲染

ViewComponent TagHelpers not rendering

有几个类似的问题,但 none 似乎是最近的问题,Microsoft 的文档没有列出任何特殊步骤:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components?view=aspnetcore-6.0

@await Component.InvokeAsync("TopBooks"... 可以正常工作,但 <vc:top-books /> 不会呈现。我将 @addTagHelper *, WebApplication1 添加到 Index.cshtml 的顶部,但 TagHelper 不起作用。如果您检查来源,它只是按原样写出来的。

我也尝试将 @addTagHelper *, WebApplication1 添加到 _ViewImports.cshtml 而不是行为上的差异。

我在 Visual Studio 2022 年创建了一个基本的 ASP.NET Core Razor Pages .NET 6 应用程序。File > New > ASP.NET Core Web App > Next until completed

然后我创建了一个非常简单的 ViewComponent 和模型:

public class TopBooksViewComponent : ViewComponent {
    public IViewComponentResult Invoke(MyBook book) {
        return View(book);
    }
}

另存为Components/TopBooksViewComponent.cs

public class MyBook {
    public string Author { get; set; }

    public string Title { get; set; }
}

另存为Models/MyBook.cs

接下来,我创建了视图:

@model WebApplication1.Models.MyBook

<h1>Top Books view component</h1>

<p>@Model.Title by @Model.Author</p>

另存为Pages/Shared/Components/TopBooks/Default.cshtml

然后,为了尝试一下,我打开 Pages/Index.cshtml 并将其修改为:

@page
@using WebApplication1.Components
@using WebApplication1.Models
@model IndexModel
@addTagHelper *, WebApplication1

@{
    ViewData["Title"] = "Home page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    @await Component.InvokeAsync("TopBooks", new MyBook() {Author = "John Smith", Title = "How to do stuff!"})
    
    <vc:top-books Author="Shepard" Title="The Reapers are coming!"></vc:top-books>
</div>

正如我所说,@await Component.InvokeAsync 可以正常工作,但 TagHelper 什么都不做。据我所知,不需要任何其他特殊设置,归结为 @addTagHelper *, WebApplication1 不工作。但是,我不确定我还能将其更改为什么。 WebApplication1 也是我的项目名称。

通过下面的 taghelper 传递的 2 string 个参数 AuthorTitle,与 Invoke 方法的签名不匹配。

<vc:top-books Author="Shepard" Title="The Reapers are coming!"></vc:top-books>

Invoke 方法需要一个 MyBook 实例。

public IViewComponentResult Invoke(MyBook book)

taghelper 应该像下面那样传递一个 MyBook 对象。

<vc:top-books book="@(new MyBook { Author = "Shepard", Title = "The Reapers are coming!" })"></vc:top-books>