我尝试在我的项目http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx中实施Phil的区域演示。 我在现有的MVC项目中添加了区域/博客结构,我的项目中出现以下错误。
以下类型之间的控制器名称“Home”不明确: WebMVC.Controllers.HomeController WebMVC.Areas.Blogs.Controllers.HomeController
这就是我的global.asax看起来的样子。
public static void RegisterRoutes(RouteCollection路由) { routes.IgnoreRoute( “{}资源个.axd / {*} PATHINFO”);
routes.MapAreas("{controller}/{action}/{id}",
"WebMVC.Areas.Blogs",
new[] { "Blogs", "Forums" });
routes.MapRootArea("{controller}/{action}/{id}",
"WebMVC",
new { controller = "Home", action = "Index", id = "" });
//routes.MapRoute(
// "Default", // Route name
// "{controller}/{action}/{id}",// URL with parameters
// new { controller = "Home", action = "Index", id = "" }
// // Parameter defaults
//);
}
protected void Application_Start()
{
String assemblyName = Assembly.GetExecutingAssembly().CodeBase;
String path = new Uri(assemblyName).LocalPath;
Directory.SetCurrentDirectory(Path.GetDirectoryName(path));
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new AreaViewEngine());
RegisterRoutes(RouteTable.Routes);
// RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}
如果我从routes.MapAreas中删除/ Areas / Blogs,它会查看根目录的索引。
答案 0 :(得分:2)
在ASP.NET MVC 2.0中,您可以在父区域中注册路由时包含父项目控制器的名称空间。
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" },
new string[] { "MyProjectName.Controllers" }
);
这限制了仅在您指定的命名空间中搜索控制器的路由。
答案 1 :(得分:1)
使用WebMVC.Areas.Blogs和WebMVC.Areas.OtherAreaName而不是WebMVC.Areas.Blogs和WebMVC。将区域名称视为命名空间根,而不是绝对命名空间。
答案 2 :(得分:0)
您可以在路由中使用相同名称的多个控制器之间进行优先级排序,如下所示
例如,我在Areas/Admin/HomeController
中有一个名为HomeController的控制器
另一个在根/controller/HomeController
中
所以我按如下方式优先考虑我的根目录:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", // Parameter defaults
id = UrlParameter.Optional },
new [] { "MyAppName.Controllers" } // Prioritized namespace which tells the current asp.net mvc pipeline to route for root controller not in areas.
);