我继续奴役MVC 2:区域......
现在我在主Controllers文件夹和其中一个区域中有两个具有相同名称的控制器(HomeController)。两者都有不同的名称空间,所以...理论上应该共存,但它们不会共存。 错误是:
控制器名称“Home”在以下类型之间不明确:
Namespace.HomeController
Namespace.Areas.AreaName.Controllers.HomeController
这与家庭控制器无关(特殊的?),但适用于任何区域的任何一对。
如何在不同区域内实现同名控制器的共存?
感谢您的时间:)
编辑: 可以在不同的区域使用相同的控制器名称:使用命名空间注册路由可以解决问题(感谢Scott的Allen article)。
答案 0 :(得分: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" }
);
}
设置根路由控制器名称空间“MvcApplication1.Controllers”,它正在运行。
希望这个提示。
答案 1 :(得分:2)
如果具有相同类名的两个控制器位于两个不同的区域,则按预期工作。
在您的情况下,区域中有一个控制器,“默认控制器文件夹”中有一个控制器。你确定这是你想要的吗?您的“默认Controllers文件夹”是否应包含某种共享控制器,例如默认帐户控制器?
这实际上是一个ASP.NET路由问题,而不是命名空间或类名称问题。 问题很可能是你有两条路由到模糊的控制器名称;一个通过区域注册注册,一个通过RegisterRoutes中的默认路由注册。