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
个参数 Author
和 Title
,与 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>
有几个类似的问题,但 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
个参数 Author
和 Title
,与 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>