MVC 6 视图组件与部分视图:有啥区别?啥时候应该使用每个? [关闭]

Posted

技术标签:

【中文标题】MVC 6 视图组件与部分视图:有啥区别?啥时候应该使用每个? [关闭]【英文标题】:MVC 6 View Components vs. Partial Views: What is the difference? When should each be used? [closed]MVC 6 视图组件与部分视图:有什么区别?什么时候应该使用每个? [关闭] 【发布时间】:2015-04-23 12:29:23 【问题描述】:

MVC 6 引入了视图组件,并表示它比部分视图更强大和灵活。视图组件是否旨在替换部分视图?每种实现有什么区别以及需要什么样的情况?

【问题讨论】:

MVC 6 View Components的可能重复 我认为视图组件可以替代子操作;当您正在寻找添加一些常见 html 元素的简单解决方案时,部分视图仍然很有用。 【参考方案1】:

根据此链接-https://docs.asp.net/en/latest/mvc/views/view-components

对于 ASP.NET MVC 6 的新功能,视图组件 (VC) 类似于局部视图,但它们的功能要强大得多。 VC 包括在控制器和视图之间发现的相同的关注点分离和可测试性优势。你可以把 VC 想象成一个微型控制器——它负责渲染一个块而不是整个响应。

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

有一篇关于 ASP.NET 视图组件的详细文章。 http://www.tugberkugurlu.com/archive/exciting-things-about-asp-net-vnext-series-mvc-view-components

【讨论】:

您可以直接从另一个视图调用(部分)视图,而无需使用任何控制器。看到这个链接:msdn.microsoft.com/en-us/library/… 所以我无法理解组件视图的真正优势:-( 局部视图不能有业务逻辑,而在视图组件中可以有业务逻辑。 我也对此感到困惑。 @JalpeshVadgama 说 w/vc 你不依赖控制器。所以......你有依赖 ViewComponent 吗?有什么好处? 让我举个例子——假设你正在开发一个电子商务应用程序,你正在开发购物车。在早期版本的 MVC 中,我们曾经为此有一个局部视图,因为我们希望在多个页面上显示它,并且该局部视图绑定到控制器中的一个动作,或者您需要在显示的每个动作中传递模型购物车。在视图组件中,它不依赖于控制器或模型。你可以让你的行为类继承自视图组件类,它会处理所有的东西。所以你只需要随时放置视图组件。 类似于 asp.net 网页表单用户组件【参考方案2】:

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

对于上述场景,您当然可以在局部视图本身中编写 C# 代码,但它很难看,而且您希望代码可测试。所以这就是视图组件有用的地方,即您可以在视图组件中编写所有业务逻辑并返回一个视图(这是ViewViewComponentResult 类型)。

视图组件与子操作不同。

【讨论】:

您能解释一下 ViewComponents 与 Child Actions 的不同之处吗? @ErikFunkenbusch 它们是相同的,没有性能缺陷。虽然如果您需要从 Ajax 返回视图组件,我会坚持使用 Action。 在 ASP.NET MVC Core 中有@inject 和视图中的依赖注入。您可以将所有业务逻辑和 3rd 方 Web 服务包装在一个接口中,并将其作为部分视图中的依赖项。这将为您提供与视图组件相同的良好分离和可测试的代码。那么有什么意义呢? 您无需在视图中编写 C# 代码。部分视图也可以有一个控制器动作..【参考方案3】:

ViewComponents 也用于需要局部视图时,这需要在 _Layout 中调用模型。为避免编写 C# 代码在 Layout 中创建模型,最好使用ViewComponent,它可以通过依赖注入使用为应用程序配置的服务,与控制器相同。

【讨论】:

以上是关于MVC 6 视图组件与部分视图:有啥区别?啥时候应该使用每个? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ViewData 和 ViewBag 有啥区别?

Asp.net mvc和asp.net有啥区别?

部分视图和渲染部分视图有啥区别?

MVVM模式下,ViewModel和View,Model有啥区别

MVVM模式下,ViewModel和View,Model有啥区别

为啥MYSQL很少人用视图,MYSQL的视图和MSSQL的视图有啥本质区别。