看来在ASP.NET Core MVC中,如果我想使用视图组件,我必须将它们放在
Views\Shared\Components\[ViewComponentName]
中,然后将文件命名为“Default.cshtml”。
这是相当令人沮丧的,因为在一个大型项目的开始,我正在帮助从 Perl CGI 进行移植,我正在创建大量视图组件,并且 Visual Studio 中的五个选项卡都名为
Default.cshtml
令人困惑。
有什么方法可以避免这种命名约定吗?也许甚至可以将它们从文件夹中取出,以便文件看起来像......?
Views\Shared\Components\[ViewComponentName].cshtml
我不知道是否只有一些设置可以调整或者什么。大多数情况下,我对 ASP.NET 非常陌生,并且仍在摸索中。使用 ASP.NET Framework 而不是 ASP.NET Core 是一个选项,但我不想这样做,因为很多样板已经完成。
ViewComponents的文档是这样说的:
我们建议您将视图文件命名为 Default.cshtml 并使用 Views/Shared/Components/{View Component Name}/{View Name} 路径。
这让我认为有一种方法可以绕过这个限制,但它没有具体说明它如何工作或它会是什么样子。
像 Nic 一样,我同意有几个到几十个名为 default.cshtml 的文件很烦人。更重要的是有几个到几十个文件夹,每个文件夹中只有一个文件
Components/ViewComponentName/default.cshtml
Components/AnotherViewComponentName/default.cshtml
Components/AThirdViewComponentName/default.cshtml
et cetera
我理解推荐名称和地点的原因...但我只是不同意并接受后果。对于那些和我一样傲慢态度的人来说,View() 允许你指定一个视图名称
return View("Schools", items);
或者甚至指定视图的路径(如果将其放在非标准位置)
return View("/Pages/Components/Schools.cshtml", items);
我正在使用 Razor Pages,但我确信这也适用于视图/共享/组件。
作为 TrentM 答案的补充,当使用 .NET 8 使用格式时
return View("/Pages/Components/Schools.cshtml", items);
可能会失败,因为框架也在寻找组件名称的文件夹。我发现我必须使用
return View("~/Views/Shared/Components/Schools.cshtml", items);
如果您不使用
~
字符,它会将您在 View("...")
中指定的任何路径附加到其他搜索到的路径上。