ASP.NET Core MVC中_Layout.cshtml引用外部分部视图报错求助
解决方案
问题原因
ASP.NET Core MVC的部分视图(Partial View)默认只会在~/Views/、~/Views/Shared/等视图相关目录下搜索,wwwroot是静态资源存储目录,不在默认的视图查找路径范围内,所以直接用@Html.Partial无法找到该目录下的.cshtml文件。
可行解决办法
办法一:遵循框架约定(推荐)
将header.cshtml移动到~/Views/Shared/目录下,之后在_Layout.cshtml中直接使用以下代码即可引入:
@Html.Partial("header")
或者使用更符合ASP.NET Core的标签助手写法:
<partial name="header" />
办法二:自定义视图引擎搜索路径
如果不想移动文件,可通过配置视图引擎,将wwwroot/inetpub/include目录添加到视图搜索路径中:
- 在项目的
Program.cs(.NET 6及以上版本)或Startup.cs(旧版本)中,修改服务配置代码:
builder.Services.AddControllersWithViews() .AddRazorOptions(options => { // 添加自定义视图搜索路径,{0}代表视图名称(不含后缀) options.ViewLocationFormats.Add("/wwwroot/inetpub/include/{0}.cshtml"); });
- 配置完成后,在
_Layout.cshtml中使用以下任一方式引入:
@Html.Partial("header") <!-- 或者指定完整路径 --> @Html.Partial("/wwwroot/inetpub/include/header")
办法三:若仅为静态HTML内容的替代方案
如果header.cshtml中没有Razor语法,只是纯HTML内容,可将其重命名为header.html,然后在_Layout.cshtml中通过读取文件内容的方式引入:
@await System.IO.File.ReadAllTextAsync(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/inetpub/include/header.html"))
内容的提问来源于stack exchange,提问作者user788448
相关产品推荐
相关产品推荐

