MVC之Area相关技术

来源:互联网 发布:开淘宝需要交钱吗 编辑:程序博客网 时间:2024/05/18 03:07

 

 当在做MVC大型网站时,我们通常会切割成多个模块。但又由于在MVC中如果有Controller名字相同的话,会出错,那如何来解决这个问题呢?微软太人性化了,看下文。

 1.新增区域

   1)添加区域

   2)设置区域名称

   3)最后显示


 2.默认路由与区域路由的优先级。

   我们在打开Global.asax,如下所示

<span style="font-size:18px;">  public class MvcApplication : System.Web.HttpApplication    {        protected void Application_Start()        {            //注册全部的区域路由            AreaRegistration.RegisterAllAreas();            WebApiConfig.Register(GlobalConfiguration.Configuration);            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);            //注册路由            RouteConfig.RegisterRoutes(RouteTable.Routes);            BundleConfig.RegisterBundles(BundleTable.Bundles);        }    }</span>

 其中第一行就是我们的区域路由注册进RouteTable.Routes,正所谓“先注册先赢”,所以我们已经在区域的OrderAreaRegistration.cs定义了某个网址路由。相应的如果两个注册机制交换顺序的画,就会先比对默认的路由。

<span style="font-size:18px;"> public class OrderAreaRegistration : AreaRegistration    {        public override string AreaName        {            //对应的路由的地址文件名称            get            {                return "Order";            }        }        public override void RegisterArea(AreaRegistrationContext context)        {            //路由的比对规则            context.MapRoute(                "Order_default",                "Order/{controller}/{action}/{id}",                new { action = "Index", id = UrlParameter.Optional }            );        }    }</span>


 3.即使使用了区域,仍然可能存在名称冲突

   比如在两种路由机制中有了相同的名称话,有时也可能出现冲突,解决办法如下,给指定的路由传入相应的namespace。当指定了命名空间后,MVC就不再会搜索整个网站的类别来寻找Controller,而是利用指定的命名空间去寻找。

<span style="font-size:18px;">public override void RegisterArea(AreaRegistrationContext context)        {            //路由的比对规则            context.MapRoute(                "Order_default",                "Order/{controller}/{action}/{id}",                new { action = "Index", id = UrlParameter.Optional },                //指定相应的命名空间,因此寻找路由的时候,就不会在发生冲突了                namespaces: new string[1] { "MvcApplication1.Areas.Order" }            );        }</span>

 4.路由的高级特性

   我们在做开发的时候,如何才能把控制器单独抽离出来来管理呢?什么意思呢?让MVC框架中的Controller来自于一个独自的类来管理,这样方便管理。那么先来了解一下MVC中视图的机制吧!

   1.视图机制

    

                        



  分析:我们在上面已经知道MVC的程序入口是Global.asax类下的Application_Start方法,在这里会先注册全部的路由机制,因此当注册完区域路由和默认的路由后,就会去比对发过来的Http请求。此时就会去程序集也就是bin文件下找名字以controller结尾的,并且继承了Controller类的文件,找到后就会采取其中的路由规则一一比对。因此利用这个特性,我们可以单独建立一个类库,然后建立相应的以Controller的类,只不过让程序最终编译进MVC的程序集中即可,这样就可以找到我们的控制器。


     

   



















0 0
原创粉丝点击