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

.NET Core MVC:如何在Razor中获取引用局部视图的视图路径

解决.NET Core MVC局部视图获取引用视图路径的问题

方案1:通过ViewData显式传递(最简实现)

在引用_debugPartial.cshtml的父视图/局部视图中,直接把当前视图路径通过view-data-new传递给局部视图:

<partial name="_debugPartial" view-data-new="CurrentViewPath: ((Microsoft.AspNetCore.Mvc.Razor.RazorView)ViewContext.View).Path" />

在_debugPartial.cshtml中读取并使用这个值:

@{
    var currentViewPath = ViewData["CurrentViewPath"] as string;
    // 获取强类型模型名称(兼容无模型场景)
    var modelName = Model != null ? Model.GetType().Name : "无强类型模型";
}

<div class="debug-info">
    <p>当前视图路径:@currentViewPath</p>
    <p>模型类型:@modelName</p>
</div>

方案2:利用ViewContext.Items共享上下文(无需手动传递)

ViewContext.Items是视图渲染周期内共享的字典,可用来存储父视图路径,避免每次引用局部视图都要传参:

  1. 在父视图(或_Layout.cshtml,实现全局生效)的顶部添加逻辑:
@{
    // 仅首次存入,避免嵌套局部视图覆盖父路径
    if (!ViewContext.Items.ContainsKey("CurrentViewPath"))
    {
        if (ViewContext.View is Microsoft.AspNetCore.Mvc.Razor.RazorView razorView)
        {
            ViewContext.Items["CurrentViewPath"] = razorView.Path;
        }
    }
}
  1. 在_debugPartial.cshtml中直接读取:
@{
    var currentViewPath = ViewContext.Items["CurrentViewPath"] as string;
    // 更严谨的模型名称获取(支持可空类型)
    var modelMetadata = ViewData.ModelMetadata;
    var modelName = modelMetadata.IsNullableValueType 
        ? $"{modelMetadata.UnderlyingOrModelType.Name}?" 
        : modelMetadata.ModelType.Name;
}

<div class="debug-info">
    <p>当前视图路径:@currentViewPath</p>
    <p>模型类型:@modelName</p>
</div>

方案3:自定义视图基类(全局自动处理)

如果所有视图都需要引入调试信息,可通过自定义Razor视图基类全局注入视图路径:

  1. 创建自定义视图基类:
using Microsoft.AspNetCore.Mvc.Razor;

public class CustomRazorViewPage<TModel> : RazorPage<TModel>
{
    public override async Task ExecuteAsync()
    {
        if (!ViewContext.Items.ContainsKey("CurrentViewPath") && ViewContext.View is RazorView razorView)
        {
            ViewContext.Items["CurrentViewPath"] = razorView.Path;
        }
        await base.ExecuteAsync();
    }
}
  1. 在_ViewImports.cshtml中替换默认基类:
@inherits CustomRazorViewPage<TModel>

之后所有视图渲染时都会自动把自身路径存入ViewContext.Items,局部视图直接读取即可,无需任何手动配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:50:15