MVC领域和路由问题

时间:2012-08-06 14:47:18

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

我在使用Areas在MVC 3中正常工作时遇到了一些问题。我有以下文件夹结构并设置了Admin区域:

enter image description here

我正在尝试从管理页面(索引)导航到Admin区域中的其他视图页面,例如Admin/Floor/Create等...但我得到The resource cannot be found错误在我试过的每个网址组合中:

  • @ Html.ActionLink(“floor”,“Index”,“Floor”,new {area =“Admin”},null)
  • /地板/索引/
  • /管理/楼层/索引/

这些都不起作用。我设法使用第一个ActionLink来链接到区域外的管理索引页面,但这里没用。

区域注册如下:

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );

有人能提供一些帮助吗?

三江源

1 个答案:

答案 0 :(得分:0)

问题出在你的路由上。您需要将默认控制器设置为AdminController

context.MapRoute( 
    "Admin_default", 
    "Admin/{controller}/{action}/{id}", 
    new { controller = "Admin", action = "Index", id = UrlParameter.Optional } 
); 

如果你没有指定这个,MVC并不完全知道你在寻找什么,实际上你希望你导航到/admin/admin以显示初始视图。因此,如上所述更改路由,然后使用此操作链接转到FloorController.Create()

@Html.ActionLink("floors", "create", "floor", new { area = "admin" }, null)

要进行扩展,通过这种方式设置路由设置,您的网址将如下所示:

/admin // Executes AdminController.Index()
/admin/floor // Executes FloorController.Index()

更新

Area Layout

下载了MaciejRogoziński的项目后,这给了我项目目前的相同问题。默认操作的链接链接到/admin/admin/,正如我前面提到的,是您的项目正在寻找的内容,因为没有为区域路由指定默认控制器(这也适用于Maciej的项目)。通过指定默认控制器,您可以导航到/admin,从而导致调用AdminController.Index()。如果不指定该控制器,则只能从路由到/admin/admin检索此视图,这也是Maciej应用程序正在执行的操作。