Asp.net mvc 2 ASP.NET MVC、区域、路由和控制器工厂

Asp.net mvc 2 ASP.NET MVC、区域、路由和控制器工厂,asp.net-mvc-2,asp.net-mvc-routing,Asp.net Mvc 2,Asp.net Mvc Routing,我有一个关于ASP.NET MVC应用程序路由的有趣问题。我正在构建一个CMS,我有一个全面的处理程序,它获取URL并检查数据库中是否有匹配的内容。如果是这样,它会显示出来,否则我们会得到404 现在我已经有了所有的测试数据,我开始写一个快速管理系统。我想我会使用MVC2中的一些新区域功能,所以我创建了一个名为Admin的区域,其中有一个名为Home的控制器。 但是现在我有一个问题,当请求应用程序根路径时,将返回管理区域中的默认HomeController 问题是“根”应用程序没有其他HomeC

我有一个关于ASP.NET MVC应用程序路由的有趣问题。我正在构建一个CMS,我有一个全面的处理程序,它获取URL并检查数据库中是否有匹配的内容。如果是这样,它会显示出来,否则我们会得到404

现在我已经有了所有的测试数据,我开始写一个快速管理系统。我想我会使用MVC2中的一些新区域功能,所以我创建了一个名为Admin的区域,其中有一个名为Home的控制器。 但是现在我有一个问题,当请求应用程序根路径时,将返回管理区域中的默认HomeController

问题是“根”应用程序没有其他HomeController—托管所有区域的应用程序,相反,根将被重定向到my catch all处理程序并从数据库填充。所以现在控制器工厂返回了最佳匹配的控制器,它认为是管理区域一,我真正需要的是它根本不匹配它-就像以前一样


除了将管理员HomeController重命名为其他名称外,还有其他解决方案吗?

编辑。。。对不起,上次的回答离题了

在黑暗中拍摄。尝试更改默认映射路由

routes.MapRoute 违约 {controller}/{action}/{id}, 新建{controller=Home,area=,action=Index,id=}

或者可能面积=null


或者将控制器从主页更改为其他内容。

编辑。。。对不起,上次的回答离题了

在黑暗中拍摄。尝试更改默认映射路由

routes.MapRoute 违约 {controller}/{action}/{id}, 新建{controller=Home,area=,action=Index,id=}

或者可能面积=null


或者将控制器从主页更改为其他内容。

在管理区域中,打开AdminAreaRegistration.cs

在控制器所在的位置添加正确的命名空间:

   public override void RegisterArea(AreaRegistrationContext context)
      {
         context.MapRoute(
             "Admin_default",
             "Admin/{controller}/{action}/{id}",
             new { action = "Index", id = UrlParameter.Optional }*,
             new string[] { "Stridh.Areas.Admin.Controllers" }*
         );
      }
现在在global.asax中执行同样的操作:

     routes.MapRoute(
         "Default", // Route name
         "{controller}/{action}/{id}", // URL with parameters
         new { controller = "Home", action = "Index", id = UrlParameter.Optional },
         new string[] { "Stridh.Controllers" } // Parameter defaults
     );

在管理区域中,打开AdminAreaRegistration.cs

在控制器所在的位置添加正确的命名空间:

   public override void RegisterArea(AreaRegistrationContext context)
      {
         context.MapRoute(
             "Admin_default",
             "Admin/{controller}/{action}/{id}",
             new { action = "Index", id = UrlParameter.Optional }*,
             new string[] { "Stridh.Areas.Admin.Controllers" }*
         );
      }
现在在global.asax中执行同样的操作:

     routes.MapRoute(
         "Default", // Route name
         "{controller}/{action}/{id}", // URL with parameters
         new { controller = "Home", action = "Index", id = UrlParameter.Optional },
         new string[] { "Stridh.Controllers" } // Parameter defaults
     );

不安静正在发生的事情,当我请求时,它将尝试在加载控制器,因为这是唯一可用的HomeController实例。您可能还希望将命名空间选项添加到默认路由声明中。不安静正在发生的事情,当我请求时,它将尝试在加载控制器,因为这是唯一可用的HomeController实例。您可能还希望将名称空间选项添加到默认路由声明中。