Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nested areas in MVC 2 / MVC 3 / MVC 4

Since MVC 2 we can create areas easily. Now my question is related to nested areas (areas inside of areas).

Select my "father" area folder, Right-mouse-click > Add > NO option for a new Area.

Is it possible to do it in some other way ? or will this option be available in the near future?

like image 761
Dryadwoods Avatar asked Jul 09 '10 10:07

Dryadwoods


3 Answers

I realise this is an old question but I'll answer it in case anyone else is trying to figure it out. A solution to this is to create areas that use a different routing value at a lower level than area, so for example your RouteConfig would look something like this:

public class RouteConfig
    {
        /// <summary>
        /// A function that registers the default navigation route.
        /// </summary>
        /// <param name="routes">The RouteCollection to act on.</param>
    public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            var route = routes.MapRoute(
            name: "Default",
            url: "{area}/{subArea}/{controller}/{action}/{id}",
            defaults: new { area = "DefaultArea", controller = "Home", action = "Splash", id = UrlParameter.Optional, section = "Customer" },
            namespaces: new string[] { "Application.Controllers" });
        }
    }

And one of your sub-area registrations might look like this:

public class ApplicationSubAreaRegistration : AreaRegistration 
{
    public override string AreaName 
    {
        get 
        {
            return "ApplicationSubArea";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
            "SubArea_default",
            "Area/SubArea/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
            new string[] { "Application.Areas.AreaName.SubAreaName.Controllers" }
        );
    }
}

After reading that, does "area" still look like a word? Because it doesn't to me.

P.S. You can do this recursively as many times as you like (theoretically) such that for example you could do

url: "{area}/{subArea}/{subSubArea}/{subSubSubArea}/{evenMoreSubArea}/{controller}/{action}/{id}",

in your RouteConfig.cs and

"Area/SubArea/SubSubArea/SubSubSubArea/EvenMoreSubArea/{controller}/{action}/{id}",

in your area registration.

like image 51
Ceshion Avatar answered Jan 02 '23 16:01

Ceshion


For now there isn't any information telling if there will be nested areas.

In the future maybe this will change.

like image 34
Dryadwoods Avatar answered Jan 02 '23 15:01

Dryadwoods


Using the idea of Multi-project areas as a start, I guess you could recursively create more nested areas.

like image 35
Ahmad Avatar answered Jan 02 '23 15:01

Ahmad