Asp.net MVC 6视图组件与局部视图:有什么区别?什么时候使用?

Asp.net MVC 6视图组件与局部视图:有什么区别?什么时候使用?,asp.net,asp.net-core-mvc,Asp.net,Asp.net Core Mvc,MVC6引入了视图组件,并表示它比局部视图更强大、更灵活。视图组件是否用于替换局部视图?每个实现有什么区别,需要什么样的情况?根据此链接- 对于ASP.NET MVC 6来说,视图组件(VCs)与局部视图类似,但功能更强大。VCs包括控制器和视图之间相同的关注点分离和可测试性优势。你可以把VC想象成一个迷你控制器,它负责呈现一个块而不是一个完整的响应 所以它只是部分视图的一个增强,另一个区别是,当您使用部分视图时,您仍然依赖于控制器,而在视图组件中,您不需要控制器。因此,有一个分离的关注点 有一

MVC6引入了视图组件,并表示它比局部视图更强大、更灵活。视图组件是否用于替换局部视图?每个实现有什么区别,需要什么样的情况?

根据此链接-

对于ASP.NET MVC 6来说,视图组件(VCs)与局部视图类似,但功能更强大。VCs包括控制器和视图之间相同的关注点分离和可测试性优势。你可以把VC想象成一个迷你控制器,它负责呈现一个块而不是一个完整的响应

所以它只是部分视图的一个增强,另一个区别是,当您使用部分视图时,您仍然依赖于控制器,而在视图组件中,您不需要控制器。因此,有一个分离的关注点

有一篇关于ASP.NET视图组件的详细文章。

您可能希望使用
ViewComponent
而不是
PartialView
的示例:
您需要编写一组业务逻辑,例如,您可能需要联系第三方web服务,获取数据并对其进行处理,然后显示此信息

对于上面的场景,当然可以在部分视图中编写C#代码,但这很难看,而且您希望代码是可测试的。因此,视图组件在这里很有用,也就是说,您可以在视图组件中编写所有业务逻辑并返回一个视图(类型为
ViewViewComponentResult


视图组件与子操作不同。

ViewComponent
s在需要局部视图时也会使用,这需要在布局中调用模型。为了避免在布局中编写C代码来创建模型,最好使用一个<代码> View组件,它可以利用与应用程序相同的服务,通过依赖注入来实现。

我认为视图组件的一个副本可以代替子操作;当您正在寻找添加一些常见html元素的简单解决方案时,部分视图仍然很有用。您能否解释ViewComponents与子操作的区别?@ErikFunkenbusch它们是相同的,没有性能缺陷。尽管如果您需要从Ajax返回视图组件,我还是会坚持一个操作。在ASP.NET MVC核心中,视图中有
@inject
和依赖项注入。您可以将所有业务逻辑和第三方web服务打包到一个接口中,并将其作为部分视图中的依赖项。这将为您提供与视图组件相同的分离良好且可测试的代码。那么,真正的重点是什么呢?您不需要在视图中编写C#代码。局部视图也可以有控制器操作。您可以直接从其他视图调用(局部)视图,而不使用任何控制器。请参见此链接:因此我无法理解组件视图的真正优势:-(部分视图不能有业务逻辑,而在视图组件中可以有业务逻辑。我对此也感到困惑。@JalpeshVadgama说,w/vc不依赖于控制器。所以……你依赖于ViewComponent?有什么好处?让我给你举个例子——假设你正在开发一个电子商务应用程序,其中您正在开发购物车。在早期版本的MVC中,我们曾经有一个部分视图,因为我们希望在多个页面上显示它,并且该部分视图绑定到控制器中的一个操作,或者您需要在显示购物车的每个操作中传递模型。在视图组件中,它不依赖于控制器或模型。您可以您将从视图组件类继承行为类,该类将处理所有内容。因此,您只需随时放置视图组件。它类似于asp.net web表单用户组件