可以将PartialViews替换为ASP.NET Core中的TagHelpers吗?

时间:2018-11-11 15:36:22

标签: asp.net-core partial-views tag-helpers

我是ASP.NET Core的新手。我刚刚发现了TagHelpers,并且我可能会明白,从理论上讲,我们应该可以将部分视图替换为标记帮助器

除此之外,def binaryadd(one, other): return not bool(one & other) and one | other可以接受输入,但TagHelper不能接受。

我认为正确吗?还是误会?谁能清楚地说明差异?

谢谢!

1 个答案:

答案 0 :(得分:2)

这是用于asp.net core 2.1 +

如果我正确理解了您的问题,则可以用自己的TagHelpers替换所有HtmlHelper部分视图,但是您已经能够使用HtmlHelpers做到这一点,所以这并不是什么新鲜事。

但是,HtmlHelpersTagHelpers和部分视图之间是有区别的。

局部视图

局部视图是Razor标记文件(.cshtml),用于在另一个标记文件的呈现输出中呈现HTML输出。例如_partial.cshtml

HtmlHelper

HtmlHelpers与MVC框架一起引入,以便能够呈现html服务器端。在剃刀视图中可以通过@字符轻松区分。

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

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

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

TagHelper

使用asp.net-core,TagHelpers是另一种通过在剃刀视图中使用标签和属性来呈现服务器端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都可以呈现部分视图。

此外,如果您查看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来为部分数据提供数据,但不能同时为这两者提供数据。
  • 从名称中省略.cshtml只会强制框架在Pages,Views和Shared文件夹中搜索视图。它完全是可选的。

希望这会有所帮助