我是ASP.NET Core的新手。我刚刚发现了TagHelpers,正如我可能知道的那样,理论上我们应该能够用标记助手替换局部视图。
除此之外,TagHelper
可以接受输入,但PartialView
不能。
我觉得对吗?还是误会?有人能解释清楚其中的区别吗?
提前感谢!
这适用于asp.net核心2.1+
如果我正确理解你的问题,你可以用你自己的TagHelpers替换所有的HtmlHelper部分视图,但你已经可以用HtmlHelpers这样做了,所以这不是什么新鲜事。
然而,HtmlHelpers
、TagHelpers
和局部视图之间存在差异。
局部视图
局部视图是一个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
中,可以使用model
或for
向分部提供数据,但不能同时使用两者 - 从名称中省略.cs.html只会强制框架在Pages、Views和Shared文件夹中搜索视图。这完全是可选的
希望这能帮助