当前位置:编程学习 > C#/ASP.NET >>

Asp.net mvc Area 路由的问题

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?

--------------------编程问答-------------------- 我能想到是  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"}
--------------------编程问答--------------------
引用 1 楼 lc8882972 的回复:
我能想到是  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"}


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

再求 --------------------编程问答-------------------- 这个问题我在书上看到过,不过找了一遍没招到。。。。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,