ASP.NET MVC 2预览2:区域重复控制器问题

twk*_*twk 6 asp.net-mvc areas

我继续奴役MVC 2的事情:领域......

现在我在主Controllers文件夹和其中一个区域中有两个具有相同名称的控制器(HomeController).两者都有不同的名称空间,所以...理论上应该共存,但它们不会共存.错误是:

控制器名称"Home"在以下类型之间不明确:

Namespace.HomeController

Namespace.Areas.AreaName.Controllers.HomeController

这与Home控制器无关(特殊的?),但适用于任何区域的任何一对.

如何实现不同区域内同名控制器的共存?

谢谢你的时间 :)

编辑:在不同的区域可以使用相同的控制器名称:使用命名空间注册路由可以解决问题(感谢斯科特的艾伦文章).

小智 7

如果你创建应用程序命名空间是MvcApplication1,你写了试试这个.

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  AreaRegistration.RegisterAllAreas();
  routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }, // Parameter defaults
    null,
    new[] { "MvcApplication1.Controllers" }
  );

}
Run Code Online (Sandbox Code Playgroud)

设置根路由控制器命名空间"MvcApplication1.Controllers",它运行.

希望这个提示.


bzl*_*zlm 2

如果具有相同类名的两个控制器位于两个不同的区域,则这将按预期工作。

就您而言,一个区域中有一个控制器,“默认控制器文件夹”中有一个控制器。您确定这是您想要的吗?您的“默认控制器文件夹”是否应该包含某种共享控制器,例如默认帐户控制器?

这实际上是一个 ASP.NET 路由问题,而不是命名空间或类名问题。问题很可能是您有两条通往不明确的控制器名称的路线;一种通过区域注册进行注册,一种通过 RegisterRoutes 中的默认路线注册进行注册。

另外,请参阅这篇有关区域排序的文章