• 【转】MVC5中的区域(Areas)


    MVC本身提倡的就是关注点分离。但是当项目本身的业务逻辑足够复杂,如果所有的业务逻辑都写个Controller文件夹下面的时候,你会看到非常庞大的各种命名的Controller,这个时候区域的作用就非常明显了,将不同的模块通过区域加以区分,简单明了。

    添加区域: 
    新建的MVC工程是没有区域的。点击项目右键->添加->区域,输入区域名称。.net会自动在项目下添加“Areas”文件夹,并在该文件夹下创建对应的区域的文件夹。创建一个“test”的区域,在区域下添加控制器“default”,将“default”控制器内容改为:

    [RouteArea("test")]
        [RoutePrefix("default")]
        public class Default1Controller : Controller
        {
            [Route("index")]
            public ActionResult Index()
            {
                return View();
            }
        }

    注册路由:

    MVC项目创建后悔自动生成文件“Global.asax”文件。找到Application_Start函数中的RouteConfig.RegisterRoutes(RouteTable.Routes).进入RegisterRoutes,在其中添加代码 routes.MapMvcAttributeRoutes()

    public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapMvcAttributeRoutes();//注册属性路由
    
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }

    删除AreaRegistration:

    当你创建新的区域时,工程会自动在区域下创建AreaRegistration。比如创建default控制器后,test区域的文件夹下会自动生成“testAreaRegistration.cs”,这个文件是MVC5以前的版本用来注册路由的。在MVC5中由于在Global.asax注册了属性路由,所以可以直接把这个文件删了,否则也会出现找不到路由的错误。内容大致是:

     public class testAreaRegistration : AreaRegistration
        {
            public override string AreaName
            {
                get
                {
                    return "test";
                }
            }
    
            public override void RegisterArea(AreaRegistrationContext context)
            {
                context.MapRoute(
                    "test_default",
                    "test/{controller}/{action}/{id}",
                    new { action = "Index", id = UrlParameter.Optional }
                );
            }
        }

    然后就可以直接通过路由的方式访问Areas中的控制器了:

    <a class="btn btn-default" href="/test1/default/index">test &raquo;</a>
  • 相关阅读:
    向量积&&凸包算法
    K短路模板POJ 2449 Remmarguts' Date
    [USACO]奶牛抗议(DP+树状数组+离散化)
    [Uva1642]魔法Gcd(数论)
    [NOIP2012]疫情控制(二分答案+倍增+贪心)
    关于欧几里德算法(gcd)的证明
    旅行(LCA)
    [NOIP2015]运输计划(树上差分+LCA+二分)
    [USACO]奶牛博览会(DP)
    24.基于groovy脚本进行partial update
  • 原文地址:https://www.cnblogs.com/eedc/p/6082013.html
Copyright © 2020-2023  润新知