6

我继续奴役 MVC 2 的东西:Areas...

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

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

命名空间.HomeController

命名空间.Areas.AreaName.Controllers.HomeController

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

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

谢谢你的时间 :)

编辑:在不同区域内使用相同的控制器名称是可以的:使用命名空间注册路由可以解决问题(感谢 Scott 的 Allen文章)。

4

2 回答 2

8

如果你创建的应用程序命名空间是 MvcApplication1,你写了 try this。

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" }
  );

}

设置根路由控制器命名空间“MvcApplication1.Controllers”,它正在运行。

希望这个提示。

于 2009-11-07T03:05:14.220 回答
2

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

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

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

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

于 2009-11-03T22:31:26.450 回答