这适用于 asp.net core 2.1+
如果我正确理解了您的问题,您可以将所有 HtmlHelper 部分视图替换为您自己的 TagHelpers,但您已经能够使用 HtmlHelpers 执行此操作,因此这不是什么新鲜事。
但是,HtmlHelpers、TagHelpers 和部分视图之间存在差异。
部分视图
部分视图是一个 Razor 标记文件 (.cshtml),它在另一个标记文件的呈现输出中呈现 HTML 输出。比如_partial.cshtml。
HtmlHelper
HtmlHelpers 是随 MVC 框架引入的,以便能够在服务器端呈现 html。在 Razor 视图中通过 @ 字符轻松区分。
@await Html.PartialAsync("_partial.cshtml", Model.Contact)
除此之外,TagHelper 可以接受输入,但 PartialView 不接受。
PartialAsync 中的第二个参数允许输入。
标签助手
使用 asp.net-core,TagHelpers 是另一种能够通过在 razor 视图中使用标签和属性来呈现服务器端 html 的方法。除了对 html 友好的视图之外,它提供的对 html 的抽象较少。在下面的代码中,我使用了 Partial TagHelper,其中 name 属性定义了视图的路径或名称,而 for 属性分配了将要评估的模型表达式(@模型)。这意味着您无需使用for="@Model.Contact",只需使用for="Contact"。
<partial name="_partial" for="Contact" />
您也可以使用 model 属性,它只是在实例化时将模型传递给局部视图。
<partial name="_partial" model='new Contact { Id = 1, Name = "Nick" }' />
从上面可以看出,TagHelpers 和 HtmlHelpers 都可以渲染部分视图。
此外,如果您查看 asp.net-core github 的 HtmlHelper
https://github.com/aspnet/Mvc/blob/b18526cdc8d8c868e8d7f9c6c8484064215e1002/src/Microsoft.AspNetCore.Mvc.ViewFeatures/HtmlHelper.cs#L554
并将其与 TagHelper 进行比较
https://github.com/aspnet/Mvc/blob/b18526cdc8d8c868e8d7f9c6c8484064215e1002/src/Microsoft.AspNetCore.Mvc.TagHelpers/PartialTagHelper.cs#L216
实际上两者都在调用 IView.RenderAsync() 并传入一个包含局部视图的 ViewContext。所以他们实际上在后面的代码中做同样的事情,除了它操纵 html 的方式。
旁注:
- 与 HtmlHelpers 非常相似,您也可以创建自己的 TagHelpers,它可以替换整个部分视图。
- TagHelpers 不会取代 HtmlHelpers,而是提供替代方法。但是,在我看来,TagHelpers 更好。它们在 Visual Studio 编辑器中呈现更好(使用的剃须刀页面由于@HtmlHelpers 存在很多格式问题),更具可读性,并且符合 html。
- 在部分
TagHelper 中,您可以使用model 或for 向部分提供数据,但不能同时使用两者。
- 从名称中省略 .cshtml 只会强制框架在 Pages、Views 和 Shared 文件夹中搜索视图。它完全是可选的。
希望对你有帮助