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

.NET Core 3.1 Razor Pages及AJAX场景下分部页搜索路径设置问题

解决方案

方法1:直接指定全路径引用(最简便,无需全局配置)

Razor 原生支持传入从应用根目录开始的绝对路径调用分部页,完全满足你自定义路径的需求,写法如下:

// 接口直接返回分部视图时
return Partial("~/Areas/Area2/Partials/_SomePartialPagePartial.cshtml", SomeDataModel);

// Razor页面内直接渲染时
<partial name="~/Areas/Area2/Partials/_SomePartialPagePartial.cshtml" model="Model.SomeData" />

注意路径必须以~/开头,且带上.cshtml后缀,只要路径正确,无论分部页放在项目任意目录都能正常加载,你提到的「调用时指定路径」的功能本身就已存在,不需要额外优化。

方法2:修复全局搜索路径配置

你之前配置不生效的核心原因是没有针对Area场景配置对应的搜索路径集合,且配置顺序错误:

  1. Razor Pages中Area相关的视图搜索路径单独存放在AreaPageViewLocationFormats集合中,而非你用的PageViewLocationFormats(后者仅作用于非Area的Razor Pages)
  2. 配置必须放在AddRazorPages()之后,否则会被默认配置覆盖

正确配置写法(Startup.cs -> ConfigureServices):

// 先注册Razor Pages服务
services.AddRazorPages();

// 再配置视图引擎选项
services.Configure<RazorViewEngineOptions>(options =>
{
    // 新增Area下Partials目录为搜索路径,{2}匹配Area名称,{0}匹配分部页名称
    options.AreaPageViewLocationFormats.Add("/Areas/{2}/Partials/{0}.cshtml");
    
    // 如果需要支持控制器返回Area下的分部视图,额外加这行
    options.AreaViewLocationFormats.Add("/Areas/{2}/Partials/{0}.cshtml");
});

配置完成后,同一Area下的分部页可以直接写名称调用,比如在Area2的页面里可以直接写return Partial("_SomePartialPagePartial", model),会自动搜索Area2/Partials目录。如果要跨Area调用,还是推荐用方法1的全路径写法,避免不同Area同名分部页冲突。

注意事项

  • 若开启了Razor运行时编译,确保分部页所在的Areas/*/Partials目录被包含在项目文件的编译内容中,默认新建的Area目录都会自动包含,无需额外调整
  • 不同Area下存在同名分部页时,全局搜索会优先命中当前调用方所在Area的Partials目录下的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 16:36:03