ASP.net MVC,项目名为MVCTest,建立一个Area,名为Admin,这个Area里有HomeController        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",
                "Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }RegisterRoutes方法中有默认route            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id =               UrlParameter.Optional }对于:http://localhost:8326/admin/home/index 
正常,使用Admin Area中的HomeController。
对于:http://localhost:8326/home/index
正常,错误提示有多个Controller。
(1)想优先使用主HomeController,为MapRoute方法加入namespaces参数
namespaces:new [] {"MVCTest.Controllers"},正常。
(2)想优先使用Admin area的HomeController,namespaces参数为:
namespaces:new [] {"MVCTest.Areas.Admin.Controllers"} 
仍然使用主HomeController,为什么?
namespaces:new [] {"Areas.Admin.Controllers"}
错误提示有多个Controller,为什么?
namespaces:new [] {"Admin.Controllers"}
错误同上能不能通过namespaces指定优先使用Area的controller?

解决方案 »

  1.   

    我能想到是  public override void RegisterArea(AreaRegistrationContext context)
            {
                context.MapRoute(
                    "Admin_default",
                    "Admin/{controller}/{action}/{id}",
                    new { action = "Index", id = UrlParameter.Optional },
                    new [] {"MVCTest.Areas.Admin.Controllers"}
                );
            }
    routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id =UrlParameter.Optional },
                     new [] {"MVCTest.Controllers"}
      

  2.   


    就是我说的情况(1)。另外我看文章说Area中不需要指定namespaces,默认的就是Area的namespaces,即会把“MVCTest.Areas.Admin”赋值给DataTokens["namespaces"].再求