PartialViews能否在ASP.NET Core中替换为TagHelpers



我是ASP.NET Core的新手。我刚刚发现了TagHelpers,正如我可能知道的那样,理论上我们应该能够用标记助手替换局部视图

除此之外,TagHelper可以接受输入,但PartialView不能。

我觉得对吗?还是误会?有人能解释清楚其中的区别吗?

提前感谢!

这适用于asp.net核心2.1+

如果我正确理解你的问题,你可以用你自己的TagHelpers替换所有的HtmlHelper部分视图,但你已经可以用HtmlHelpers这样做了,所以这不是什么新鲜事。

然而,HtmlHelpersTagHelpers和局部视图之间存在差异。

局部视图

局部视图是一个Razor标记文件(.cs.HTML(,它在另一个标记文件的渲染输出中渲染HTML输出。例如_partial.cshtml

HtmlHelper

HtmlHelpers是在MVC框架中引入的,以便能够呈现html服务器端。通过剃刀视图中的@字符很容易区分。

@await Html.PartialAsync("_partial.cshtml", Model.Contact)

除此之外,TagHelper可以接受输入,但PartialView不能。

PartialAsync中的第二个参数允许输入。

标记帮助程序

使用asp.net-core,TagHelpers是另一种能够通过使用剃刀视图中的标签和属性来渲染服务器端html的方式。除了html友好的视图之外,它还提供了较少的html抽象。在下面的代码中,我使用的是Partial TagHelper,其中name属性定义视图的路径或名称,for特性指定将计算的模型表达式(@model(。这意味着您不需要使用for="@Model.Contact",只需使用for="Contact"即可。

<partial name="_partial" for="Contact" />

您还可以使用model属性,该属性只是在实例化时将模型传递给部分视图。

<partial name="_partial" model='new Contact { Id = 1, Name = "Nick" }' />

如上所述,TagHelper和HtmlHelper都可以渲染局部视图

此外,如果您查看用于HtmlHelper 的asp.net-core github

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中,可以使用modelfor向分部提供数据,但不能同时使用两者
  • 从名称中省略.cs.html只会强制框架在Pages、Views和Shared文件夹中搜索视图。这完全是可选的

希望这能帮助

最新更新