ASP.NET MVC Area 区域

  大型网站或项目通常有很多子系统或功能模块,如大型网站可能包含酒店、旅游、机票子系统,通过二级域名来访问,或者一个网站的前台和后台模块,每个团队负责某一子系统或模块,为了各团队进行协同开发,我们可以分不同的MVC项目,或使用区域Area进行隔离,Ares相当于一个大项目中的独立小项目,每一个Area都有独立的Controller,View文件结构,互不影响,易于项目维护和管理。

  路由注册时候为了避免相同控制器和Action冲突,要定义命名空间。例如区域中和默认的都有HomeController的Index方法,如果不定义命名空间,会找到两个匹配的结果,会报错误。 

public class FlightsAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Flights";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Flights_default",
                "Flights/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                namespaces: new string[] { "WebApplication2.Areas.Flights.Controllers" }
            );
        }
    }
   routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new string[] { "WebApplication2.Controllers" }   //一定要告知,这个maproute是寻找哪一个命名空间下面的Controller
            );

   另外,在不同Area间跳转,把Route中的area指定就可以了。

  @Html.ActionLink("Click me to go to another area", "Index", new { area = "Support" })

原文地址:https://www.cnblogs.com/shawnhu/p/8404680.html