【发布时间】:2015-04-23 12:29:23
【问题描述】:
MVC 6 引入了视图组件,并表示它比部分视图更强大和灵活。视图组件是否旨在替换部分视图?每种实现有什么区别以及需要什么样的情况?
【问题讨论】:
-
我认为视图组件可以替代子操作;当您正在寻找添加一些常见 html 元素的简单解决方案时,部分视图仍然很有用。
MVC 6 引入了视图组件,并表示它比部分视图更强大和灵活。视图组件是否旨在替换部分视图?每种实现有什么区别以及需要什么样的情况?
【问题讨论】:
根据此链接-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
【讨论】:
您可能希望使用 ViewComponent 而不是 PartialView 的示例:
您需要编写一堆业务逻辑,例如您可能需要联系第 3 方网站服务并获取数据并对其进行处理,然后显示此信息。
对于上述场景,您当然可以在局部视图本身中编写 C# 代码,但它很难看,而且您希望代码可测试。所以这就是视图组件有用的地方,即您可以在视图组件中编写所有业务逻辑并返回一个视图(这是ViewViewComponentResult 类型)。
视图组件与子操作不同。
【讨论】:
@inject 和视图中的依赖注入。您可以将所有业务逻辑和 3rd 方 Web 服务包装在一个接口中,并将其作为部分视图中的依赖项。这将为您提供与视图组件相同的良好分离和可测试的代码。那么有什么意义呢?
ViewComponents 也用于需要局部视图时,这需要在 _Layout 中调用模型。为避免编写 C# 代码在 Layout 中创建模型,最好使用ViewComponent,它可以通过依赖注入使用为应用程序配置的服务,与控制器相同。
【讨论】: