如何避免在 ASP.NET Core MVC 中将视图组件 cshtml 命名为“Default.cshtml”?

问题描述 投票:0回答:2

看来在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} 路径。

这让我认为有一种方法可以绕过这个限制,但它没有具体说明它如何工作或它会是什么样子。

asp.net-core asp.net-core-mvc asp.net-core-viewcomponent view-components
2个回答
12
投票

像 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,但我确信这也适用于视图/共享/组件。


0
投票

作为 TrentM 答案的补充,当使用 .NET 8 使用格式时

return View("/Pages/Components/Schools.cshtml", items);

可能会失败,因为框架也在寻找组件名称的文件夹。我发现我必须使用

return View("~/Views/Shared/Components/Schools.cshtml", items);

如果您不使用

~
字符,它会将您在
View("...")
中指定的任何路径附加到其他搜索到的路径上。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.