【问题标题】: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 元素的简单解决方案时,部分视图仍然很有用。

标签: asp.net asp.net-core-mvc


【解决方案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,它可以通过依赖注入使用为应用程序配置的服务,与控制器相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2011-07-19
    • 2011-01-11
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多