如何在ASP.NET Core中的.cshtml文件中获取当前的MVC区域名称

dev*_*ric 5 asp.net-core-mvc asp.net-core

我可以_Layout.cshtml 通过执行以下操作获取当前控制器名称和操作名称

var controller = ViewContext.RouteData.Values["controller"].ToString();
var action = ViewContext.RouteData.Values["action"].ToString();
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试获得该区域

var area = ViewContext.RouteData.Values["area"].ToString();
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为该对象中只存在2个键("控制器"和"动作")

我检查了ViewContext.RouteData对象,无法获取当前Area名称的值.

之前版本的先前答案ASP.net对我不起作用.

Shy*_*yju 13

感谢Pranav的评论!GetNormalizedRouteValue方法现在是公开的.因此,RazorViewEngine.GetNormalizedRouteValue当您将密钥作为"区域"传递时,可以在视图中将方法调用为区域名称.

<h2> @RazorViewEngine.GetNormalizedRouteValue(ViewContext, "area") </h2>
Run Code Online (Sandbox Code Playgroud)

RazorViewEngineclass属于Microsoft.AspNetCore.Mvc.Razornamespace.因此,请确保在视图中使用using语句导入该语句.

@using Microsoft.AspNetCore.Mvc.Razor
Run Code Online (Sandbox Code Playgroud)

GetNormalizedRouteValue方法与前一版本的答案中解释的相同.你可以这里看到源代码


这完全适用于剃须刀(MVC6).

@using Microsoft.AspNet.Routing
@{        
    var myAreaName = string.Empty;
    object areaObj;
    if (ViewContext.RouteData.Values.TryGetValue("area", out areaObj))
    {
        myAreaName = areaObj.ToString();
    }
}

<h1>@myAreaName</h1>
Run Code Online (Sandbox Code Playgroud)