Get Current Area Name in View or Controller

前端 未结 12 1560
闹比i
闹比i 2020-11-29 00:50

How do you get the current area name in the view or controller?

Is there anything like ViewContext.RouteData.Values[\"controller\"] for areas?

12条回答
  •  独厮守ぢ
    2020-11-29 01:19

    I created an extension method for RouteData that returns the current area name.

    public static string GetAreaName(this RouteData routeData)
    {
        object area;
        if (routeData.DataTokens.TryGetValue("area", out area))
        {
            return area as string;
        }
    
        return null;
    }
    

    Since RouteData is available on both ControllerContext and ViewContext it can be accessed in your controller and views.

    It is also very easy to test:

    [TestFixture]
    public class RouteDataExtensionsTests
    {
        [Test]
        public void GetAreaName_should_return_area_name()
        {
            var routeData = new RouteData();
            routeData.DataTokens.Add("area", "Admin");
            routeData.GetAreaName().ShouldEqual("Admin");
        }
    
        [Test]
        public void GetAreaName_should_return_null_when_not_set()
        {
            var routeData = new RouteData();
            routeData.GetAreaName().ShouldBeNull();
        }
    }
    

    There is no need to check if RouteData.DataTokens is null since this always initialized internally.

提交回复
热议问题