ASP.NET Core 7 MVC中如何让布局搜索指定子目录?
ASP.NET Core 7 MVC布局文件路径配置问题
我有一个ASP.NET Core 7 MVC应用,布局文件结构如下(见图示):在_ViewStart.cshtml文件中,我指定布局为:
@{ Layout = $"~/Views/Shared/Layouts/_Main"; }
运行项目时无法找到该布局,仅当在末尾添加.cshtml后缀时才能正常工作:
@{ Layout = $"~/Views/Shared/Layouts/_Main.cshtml"; }
请问是否可以让ASP.NET Core 7 MVC应用搜索特定文件夹中的布局?如果可以,具体该如何操作?另外是否也可以不用指定文件路径?
问题解答
1. 让应用搜索特定文件夹中的布局
可以通过配置视图引擎的视图位置格式实现,步骤如下:
在Program.cs的MVC服务配置段中,添加自定义的视图搜索路径,让引擎自动在指定文件夹查找布局文件(无需手动加.cshtml后缀):
builder.Services.AddControllersWithViews(options => { // 添加自定义布局文件夹的搜索规则 options.ViewLocationFormats.Add("~/Views/Shared/Layouts/{0}.cshtml"); });
配置完成后,你就能在_ViewStart.cshtml中直接写:
@{ Layout = "_Main"; }
视图引擎会自动去配置的~/Views/Shared/Layouts/文件夹下查找_Main.cshtml文件。
2. 不用指定文件路径的实现方式
当然可以,主要有两种思路:
- 利用默认搜索路径:ASP.NET Core MVC默认优先搜索当前控制器对应的Views子文件夹,再搜索
~/Views/Shared/文件夹。如果把布局文件直接放在~/Views/Shared/下,直接写布局名即可:
引擎会自动匹配@{ Layout = "_Main"; }~/Views/Shared/_Main.cshtml。 - 配置全局默认布局:如果整个应用统一使用某个布局,可在
Program.cs中全局配置,无需在_ViewStart.cshtml中单独指定:
这样所有视图都会自动使用builder.Services.AddControllersWithViews(options => { options.ViewLocationFormats.Add("~/Views/Shared/Layouts/{0}.cshtml"); // 设置全局默认布局 options.Filters.Add(new LayoutAttribute("_Main")); });_Main布局,无需额外编写布局指定代码。
注意:如果布局文件不在默认搜索路径或你配置的自定义路径中,仍需指定完整路径(带后缀)才能被找到。
内容的提问来源于stack exchange,提问作者KTOV
相关产品推荐
相关产品推荐

