Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC在何处放置视图组件文件_C#_.net_Asp.net Mvc_Asp.net Core_Razor - Fatal编程技术网

C# MVC在何处放置视图组件文件

C# MVC在何处放置视图组件文件,c#,.net,asp.net-mvc,asp.net-core,razor,C#,.net,Asp.net Mvc,Asp.net Core,Razor,关于项目结构的问题。到目前为止,我在.NET核心应用程序中有3个ViewComponents 在Microsoft关于视图组件的页面中,它们使用名称空间ViewComponentSample.ViewComponents,但实际上,引擎会在中搜索视图组件 /页面/组件/ProductBox/Default.cshtml /页面/Shared/Components/ProductBox/Default.cshtml /视图/Shared/Components/ProductBox/Default

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

在Microsoft关于视图组件的页面中,它们使用名称空间ViewComponentSample.ViewComponents,但实际上,引擎会在中搜索视图组件

  • /页面/组件/ProductBox/Default.cshtml
  • /页面/Shared/Components/ProductBox/Default.cshtml
  • /视图/Shared/Components/ProductBox/Default.cshtml
这意味着:在页面/视图/模型旁边创建ViewComponents文件夹将无法工作,因为它找不到它们

这意味着我把它们放在页面/共享中,对吗?当局部视图以“3;”开头时,我是否应该将其保留在ViewComponents中

目前,我已将其放在Pages\Shared\ProductBox中,视图位于Pages\Shared\Components\ProductBox\Default中

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

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

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

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

  • LatestArticlesViewComponent:将RssItem类定义为子类,并返回它们的列表
  • CoachingFormViewComponent:model派生自PageModel,ViewComponent只将页面的模型传递给视图
  • ProductBoxViewComponent:model是由具有显示属性的ViewComponent启动的POCO类
(起初我将ViewComponent类作为视图的模型传递,但这是一种代码味道,因此我将其更改为使用单独的模型类)


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

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

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