2010-04-05 94 views
1

我有一个与ASP.NET MVC应用程序的一些路由有趣的问题。我正在构建一个CMS,并且我有一个捕获所有处理程序,它接受URL并检查数据库中是否有匹配的内容。如果是这样,则显示它,否则我们得到了404ASP.NET MVC,区域,路由和控制器工厂

现在我已经获得了所有与一些测试数据的工作,我提出写一个快速的管理系统。我想我会使用一些新的Area功能烘焙到MVC 2中,所以我创建了一个名为Admin的区域,其中包含一个名为Home的控制器。 但现在我有一个问题,在请求应用程序根路径时,管理区中的默认HomeController正在返回。

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

除了重命名管理员的HomeController别的东西,是有另一种解决方案?

回答

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 
    ); 
+0

忘记了更新,但这是最终的解决方案。 – Kieron 2010-11-19 13:14:42

0

编辑...(对不起,最后回答是关闭主题)。

在黑暗中拍摄。尝试改变默认的图路线....

routes.MapRoute( “默认”,
“{控制器}/{行动}/{ID}”,
新{控制器= “家”,区= “”,行动= “指数”,ID = “”}

也许面积= NULL。

或改变从家里控制器别的东西。

+0

不安静是怎么回事,当我请求http://本地主机/它会尝试在http:// localhost/Area /加载控制器,因为这是唯一可用的HomeController实例。 – Kieron 2010-04-05 16:24:29

+0

我在上面编辑了我的答案。 – 2010-04-05 17:48:59

+0

您可能还想将命名空间选项添加到默认路由声明中。 – Ahmad 2010-04-21 10:21:42