【问题标题】:MVC Areas and routing issueMVC 区域和路由问题
【发布时间】:2012-08-03 13:29:40
【问题描述】:

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

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

  • @Html.ActionLink("floors", "Index", "Floor", new { area = "Admin" }, null)
  • /楼层/索引/
  • /管理员/楼层/索引/

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

区域注册是这样的:

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

谁能提供一些帮助?

谢谢

【问题讨论】:

  • 我知道这很愚蠢,但是您是否在添加新控制器后重新构建了项目?在您路由中,一切看起来都不错,您不需要任何默认控制器。只有当我添加了一个带视图的新控制器并且没有构建项目时,我才能重复错误。
  • 我会尝试重建,但我怀疑就是这样
  • 这是你想要达到的吗? dl.dropbox.com/u/1171045/MvcApplication7.zip
  • 是的,就是这样。看看你所拥有的,它与我所拥有的基本相同,我完全不知道为什么这不起作用......
  • 你有AreaRegistration.RegisterAllAreas();在 global.asax MvcApplication.Application_Start() 方法中?您是使用向导还是手动创建区域?

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


【解决方案1】:

问题在于您的路由。您需要将默认控制器设置为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)

稍微扩展一下,通过这种方式设置路由,您的 URL 将如下所示:

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

更新

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

【讨论】:

  • 感谢您的建议。我已经尝试将默认控制器设置为Admin,这会导致同样的问题,尝试使用您的ActionLink 仍然找不到正确的视图?
  • @Duane 我在这里有一个测试项目设置,它工作正常。我将用一些屏幕截图更新我的答案,以便您了解所有内容的布局。
  • @Duane 抱歉更新缓慢。我不得不接电话。
  • @JohnH 但是当你使用 @Html.ActionLink("floors", "create", "floor", new { area = "admin" }, null) 你指定一个控制器,主要是 floor 所以这应该不是问题
  • 嗨@John H,没问题。我实际上设法解决了这个问题,这是一个简单的案例,即在移动文件夹后不更新命名空间。我责怪星期一!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 2016-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-17
相关资源
最近更新 更多