MVC放置视图组件文件的位置

时间:2019-05-20 15:25:17

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

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

在有关View组件的Microsoft页面中,它们使用命名空间ViewComponentSample.ViewComponents,但实际上,引擎在以下位置搜索View组件

  • /Pages/Components/ProductBox/Default.cshtml
  • /页面/共享/组件/ProductBox/Default.cshtml
  • /视图/共享/组件/ProductBox/Default.cshtml

这意味着:无法在Pages / Views / Models旁边创建ViewComponents文件夹,因为找不到它们。

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

当前,我将其放在Pages \ Shared \ ProductBox中,并将视图放在Pages \ Shared \ Components \ ProductBox \ Default中。

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

此ProductBox应该位于MyWebsite.Pages.Shared命名空间中还是MyWebsite.ViewComponents命名空间中?

对于模型,我应该将其放置在“模型”文件夹中还是“视图组件”旁边,因为它的代码与之直接相关?我不喜欢将组件分散到3个文件夹中(ViewComponent,Components \ ProductBox和Models)。拥有ProductBox确实感觉有些奇怪,但是就像页面旁边有模型一样。

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

  • LatestArticlesViewComponent:将RssItem类定义为子类,并返回它们的列表。
  • CoachingFormViewComponent:模型从PageModel派生而ViewComponent除了将页面的模型传递给View之外不执行其他操作。
  • ProductBoxViewComponent:模型是由ViewComponent发起的具有显示属性的POCO类。

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

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

1 个答案:

答案 0 :(得分:0)

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

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