如何在MVC3中使用MapRoute和Areas

时间:2012-07-22 01:06:14

标签: c# asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc-3-areas

我的网络应用中有一个名为“Admin”的区域。

因此,http://localhost.com/Admin转到管理区域中的Home Controller和Index Action。

但是,我希望能够使用以下网址点击Admin Home Controller和Index Action:

http://localhost.com/Hello

我有这个尝试:

routes.MapRoute(
            "HelloPage",
            "Hello/{controller}/{action}",
            new{area= "Admin", controller = "Home", action = "Index"},
            new[] { typeof(Areas.Admin.Controllers.HomeController).Namespace });

正如您所看到的,我正在指定命名空间和区域,但我得到的只是路由错误:

  

未找到“索引”视图或其主视图或视图引擎不支持搜索的位置。

它没有在管理区域搜索。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

试试这个:

routes.MapRoute(
       "HelloPage",
       "Hello/{controller}/{action}/{id}",
       new { area = "Admin", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

然后将其添加到管理控制器操作中:

  if (!this.ControllerContext.RouteData.DataTokens.ContainsKey("area"))
  {
      this.ControllerContext.RouteData.DataTokens.Add("area", "Admin")
  }

您可以check here获取进一步的文档。

答案 1 :(得分:5)

问题在于我在Global.asax中设置路线。

我应该在Admin区域的AreaRegistration中设置它。一旦我这样做,问题就解决了。