ASP.NET MVC,区域,路由和控制器工厂

时间:2010-04-05 10:07:25

标签: asp.net-mvc-2 asp.net-mvc-routing

我使用ASP.NET MVC应用程序进行一些路由时遇到了一个有趣的问题。我正在构建一个CMS,我有一个全能的处理程序,它接受URL并检查数据库中是否有一些匹配的内容。如果是这样,它会显示它,否则我们会得到404。

现在我已经完成了一些测试数据的工作,我开始编写一个快速的管理系统。我以为我会使用一些新的Area功能烘焙到MVC 2中,因此我创建了一个名为Admin的区域,其中包含一个名为Home的控制器。 现在我有一个问题,就是在请求应用程序根路径时返回管理区域中的默认HomeController。

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

除了将Admin HomeController重命名为其他内容之外,还有其他解决方案吗?

2 个答案:

答案 0 :(得分:4)

在“管理”区域中,打开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
     );

答案 1 :(得分:0)

编辑...(抱歉,最后一个答案不在话题)。

在黑暗中拍摄。尝试更改默认的maproute ....

routes.MapRoute(                 “默认”,
                “{控制器} / {行动} /(编号)”,
                new {controller =“Home”, area =“”,action =“Index”,id =“”}

或者也许是area = null。

或将控制器从家更改为其他内容。