在ASP.NET MVC6中使用TagHelpers与ViewComponents

cec*_*lip 13 asp.net-core-mvc asp.net-core

我试图理解asp.net 5中TagHelpers和ViewComponents之间的用例差异,因为最终结果功能看起来非常相似.我们有TagHelpers可以创建新的HTML标记,这些标记由Razor引擎解析,然后是明确调用的ViewComponents.两者都返回一些HTML内容,两者都有各自的基类支持,两者都有可以实现的异步版方法来完成工作.

那么什么时候会用到另一个呢?或者我错过了一些信息?

N. *_*len 15

TagHelpers和ViewComponents之间肯定存在一些概念上的重叠.TagHelpers是您使用HTML的实用程序,其中ViewComponents是您坚持使用C#,执行隔离工作然后吐出HTML的方法.我将详细介绍每一个:

ViewComponents
概念上等同的迷你控制器; 您将看到ViewComponents公开的许多方法/属性对于Controller上存在的方法/属性非常熟悉.现在,对于调用ViewComponents,这更像是利用HTML帮助程序(TagHelpers做得更好).总结ViewComponents:他们的主要目的是感觉像一个控制器,留在C#land(可能没有必要为HTML添加实用程序),做小/隔离的工作,然后吐出字符串化的HTML.

TagHelpers
一种实用程序,使您可以使用现有的HTML或创建新的HTML元素来修改页面上发生的事情.与ViewComponents不同,TagHelpers可以定位任何现有的HTML并修改其行为; 示例:您可以将条件属性添加到有条件地呈现元素服务器端的所有HTML元素.TagHelpers还允许您混合常见的HTML术语,例如:

<myTagHelper class="btn">Some Content</myTagHElper>

正如您所看到的,我们正在为TagHelper添加一个类属性,就像它是HTML一样.要在ViewComponents中执行此操作,您需要传入属性字典或等效字符(不自然).最后,多个TagHelper可以在单个HTML元素上运行; 每个都有自己的阶段修改输出(允许输入模块化TagHelper工具包).总结一下TagHelpers:他们可以做任何ViewComponents可以做的事情,但是对于像ASP.NET开发人员习惯的控制器这样的事情,他们并不熟悉; 还有一些项目可能不希望混合服务器端HTML.

额外:
我最近做了一个展示TagHelpers优势的视频.基本上是了解他们擅长什么以及如何使用它们.你可以在这里观看.