You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:52:13