.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是视图渲染周期内共享的字典,可用来存储父视图路径,避免每次引用局部视图都要传参:
- 在父视图(或
_Layout.cshtml,实现全局生效)的顶部添加逻辑:
@{ // 仅首次存入,避免嵌套局部视图覆盖父路径 if (!ViewContext.Items.ContainsKey("CurrentViewPath")) { if (ViewContext.View is Microsoft.AspNetCore.Mvc.Razor.RazorView razorView) { ViewContext.Items["CurrentViewPath"] = razorView.Path; } } }
- 在
_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视图基类全局注入视图路径:
- 创建自定义视图基类:
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(); } }
- 在
_ViewImports.cshtml中替换默认基类:
@inherits CustomRazorViewPage<TModel>
之后所有视图渲染时都会自动把自身路径存入ViewContext.Items,局部视图直接读取即可,无需任何手动配置。
内容的提问来源于stack exchange,提问作者patsy2k
相关产品推荐
相关产品推荐

