MVC3:一个控制器,多个路由

时间:2011-11-29 07:34:06

标签: c# asp.net-mvc-3 routes

我有一个包含多个区域的MVC3应用程序。每个区域都是不同的应用程序模块,但它们共享一个共同的功能 - 报告。因此,我在根区域编写了一个报告控制器和视图,并希望使用路由将它们附加到所有区域。这种方法适用于MVC1,但随后我升级到MVC3,路由停止工作并始终返回404.

每个模块/区域的路由结构类似:

Module1/Reports.aspx/
Module1/PreportView.aspx/{id}
Module1/{controller}/{action}
Module1/{controller}/{action}/{id}

并且模块的路由注册通过以下方法进行:

protected override void RegisterRoutes(AreaRegistrationContext context, string arearoot, string defaultControllerName){
  context.MapRoute(arearoot + "Reports", arearoot + "/Reports.aspx",
    new { action = "Index", controller = "Reports" }, new string[] { "Controllers" }); //this should work in MVC3 according to docs

  context.MapRoute(arearoot + "ReportView", arearoot + "/ReportView.aspx/{id}",
    new { action = "Show", controller = "Controllers.ReportsController" });//this method worked in MVC1

  context.MapRoute(arearoot,
    arearoot + "/{controller}.aspx/{action}",
    new { controller = defaultControllerName, action = "Index" },
    GetRouteNamespaces());

  context.MapRoute(arearoot + "ItemSpecific",
    arearoot + "/{controller}.aspx/{action}/{id}");
}

protected string[] GetRouteNamespaces() {
  return new string[] { "Controllers.Module1" }; //returns proper namespace for each module
}

我试图附加 RouteDebugger (由于.aspx扩展名失败)和 Glimpse ,但是没有一个显示我有任何问题,路由表似乎没问题,但是当我尝试导航到报告时,我总是得到404错误代码。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

  • 请检查您所在区域目录中的区域注册路线。
    • 同时获取调试期间注册路由的所有列表。如果您正在使用,路由会在ASP.net MVC 2或更高版本中的许多位置注册 区域。
      • 您还必须在注册路线时指定区域。 (与指定控制器的方式相同)