【问题标题】:MVC Where To Put View Component FilesMVC 放置视图组件文件的位置
【发布时间】:2019-10-07 00:03:19
【问题描述】:

关于项目结构的问题。到目前为止,我在 .NET Core 应用程序中有 3 个 ViewComponents。

在关于 View Components 的 Microsoft 页面中,他们使用命名空间 ViewComponentSample.ViewComponents,但实际上,引擎会在其中搜索 View Components

  • /Pages/Components/ProductBox/Default.cshtml
  • /Pages/Shared/Components/ProductBox/Default.cshtml
  • /Views/Shared/Components/ProductBox/Default.cshtml

这意味着:在 Pages/Views/Models 旁边创建一个 ViewComponents 文件夹将不起作用,因为它找不到它们。

这意味着我将它们放在页面/共享中,对吗?虽然部分视图以“_”开头,但我应该把它留给 ViewComponents 吗?

目前我已将它放在 Pages\Shared\ProductBox 中,视图在 Pages\Shared\Components\ProductBox\Default 中。

然后还有 2 个问题。模型的命名空间和位置。

这个 ProductBox 应该在命名空间 MyWebsite.Pages.Shared 中,还是在命名空间 MyWebsite.ViewComponents 中?

至于模型,我应该把它放在 Models 文件夹中还是放在 View Component 旁边,因为它是直接相关的代码?我不喜欢将组件分散到 3 个文件夹中(ViewComponent、Components\ProductBox 和 Models)。有 ProductBox 确实感觉有点奇怪,但就像页面旁边有模型一样。

对于与视图组件关联的模型,到目前为止,我有 3 个组件使用它们的模型完全不同。

  • LatestArticlesViewComponent:将 RssItem 类定义为子类,并返回它们的列表。
  • CoachingFormViewComponent:模型派生自 PageModel 表单,而 ViewComponent 只是将页面的模型传递给视图。
  • ProductBoxViewComponent:模型是一个POCO类,由具有显示属性的ViewComponent发起。

(起初我将 ViewComponent 类作为视图的模型传递,但这是代码异味,因此我将其更改为使用单独的模型类)

我做得对吗?我已经取得了进展,但想确保我走在正确的轨道上。

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-core razor


    【解决方案1】:

    坦率地说,这些都不重要。你可以把任何东西放在你想要的任何地方。按照惯例,组件的视图应该放在{Views,Pages}/Shared/Components 中。路径的 Views/Pages 部分仅取决于您使用的是 Razor 页面还是 MVC 视图,即使那样,也只是您不需要额外的文件夹。对于 Razor Pages,默认情况下没有 Views 文件夹,同样对于 MVC,默认情况下也没有 Pages 文件夹。但是,您可以在同一个项目中同时使用 Razor Pages 和 MVC,因此理论上可以同时拥有这两个目录。在这种情况下,您将组件放在哪里完全是一个判断电话。但是,除此之外,您可以更改这些约定或直接从您的组件中引用视图。无论哪种情况,组件视图都可以放在您选择的任何地方。这完全取决于您。

    实际的视图组件本身在很大程度上是相同的。惯例是将它们放在名为ViewComponents 的文件夹中,但这完全是可选的。 ASP.NET Core 通过反射将它们拉入,因此实际位置根本不重要,命名空间也不重要。命名空间更加无形,因为它们在这里根本不重要。您可以遵循文件所在位置的约定,或完全使用其他内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多