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

ASP.NET Core Identity区域无法识别自定义视图搜索路径问题

问题描述

我正在开发一个ASP.NET Core Web应用,已将分部视图从/Views/Shared文件夹移至子文件夹/Views/Shared/MenuPartials。

Identity已完全搭建完成,代码位于项目的Areas/Identity/Pages目录下,仅在Manage/Index.cshtml及其后台代码中添加了一些额外字段。

我在Program.cs中添加了视图位置格式配置:

builder.Services.Configure<RazorViewEngineOptions>(options =>
{
    // {2} 区域, {1} 控制器,{0} 操作 - 文件夹中的所有操作
    options.ViewLocationFormats.Add("/Views/Shared/MenuPartials/{0}" + RazorViewEngine.ViewExtension);
});

该配置在非Identity区域的页面中正常工作,但访问Identity页面https://localhost:44347/Identity/Account/Manage时,自定义搜索路径未被识别,抛出异常:

InvalidOperationException: 未找到分部视图“_admin”。已搜索以下位置:
/Areas/Identity/Pages/Account/Manage/_admin.cshtml
/Areas/Identity/Pages/Account/_admin.cshtml
/Areas/Identity/Pages/_admin.cshtml
/Areas/Identity/Pages/Shared/_admin.cshtml
/Areas/Identity/Views/Shared/_admin.cshtml
/Pages/Shared/_admin.cshtml
/Views/Shared/_admin.cshtml

为何Identity区域不使用额外的视图发现路径?在非区域页面中测试时,该搜索路径正常(会搜索/Views/Shared/MenuPartials/_admin.cshtml等路径)。

我曾尝试添加以下代码,但无效果:

options.AreaViewLocationFormats.Add("/Views/Shared/MenuPartials/{0}" + RazorViewEngine.ViewExtension);

如何让Identity区域搜索MenuPartials和ButtonPartials文件夹?

解决方案

因为Identity基于Razor Pages实现,而非传统MVC控制器视图,之前的配置只覆盖了MVC视图的搜索规则,没对Razor Pages生效。需要针对Razor Pages的视图位置规则补充配置:

  1. 补充全局Razor Pages视图路径
    在Program.cs的配置中,添加PageViewLocationFormats,覆盖非区域Razor Pages的视图搜索范围:

    builder.Services.Configure<RazorViewEngineOptions>(options =>
    {
        // 非区域MVC视图路径
        options.ViewLocationFormats.Add("/Views/Shared/MenuPartials/{0}" + RazorViewEngine.ViewExtension);
        options.ViewLocationFormats.Add("/Views/Shared/ButtonPartials/{0}" + RazorViewEngine.ViewExtension);
        
        // 非区域Razor Pages视图路径
        options.PageViewLocationFormats.Add("/Views/Shared/MenuPartials/{0}" + RazorViewEngine.ViewExtension);
        options.PageViewLocationFormats.Add("/Views/Shared/ButtonPartials/{0}" + RazorViewEngine.ViewExtension);
    });
    
  2. 添加区域Razor Pages视图路径
    针对Identity这类区域内的Razor Pages,必须配置AreaPageViewLocationFormats,让区域页面能搜索到根目录下的自定义共享文件夹:

    builder.Services.Configure<RazorViewEngineOptions>(options =>
    {
        // 保留上述配置
        
        // 区域Razor Pages视图路径
        options.AreaPageViewLocationFormats.Add("/Views/Shared/MenuPartials/{0}" + RazorViewEngine.ViewExtension);
        options.AreaPageViewLocationFormats.Add("/Views/Shared/ButtonPartials/{0}" + RazorViewEngine.ViewExtension);
    });
    
  3. 验证要点
    配置完成后,Identity区域的Razor Pages查找分部视图时,会自动把/Views/Shared/MenuPartials/_admin.cshtml和/Views/Shared/ButtonPartials/_admin.cshtml加入搜索列表。同时要确认:

    • 分部视图文件名正确(比如_admin.cshtml的大小写是否和调用时一致)
    • 文件夹结构完全匹配配置的路径

内容的提问来源于stack exchange,提问作者bart s

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:55:24