我一直在寻找解决方案来解决我的问题。发现了很多类似的问题,但没有一个能为我提供解决方案。ASP.Net MVC 2区域,子区域和路线
我想在一个区域内注册一个区域。然而,这种方法可以“部分地”把我的路由搞砸了。在他们注册的顺序,考虑FooBar的和Foo注册
我的路线登记从AreaRegistrations
现身routes.MapRoute("FooBar_default",
"Foo/Bar/{controller}/{action}",
new { area = "Foo/Bar", controller = "Home", action = "Index"},
new[] { BarHomeControllerType.Namespace }
);
routes.MapRoute("Foo_default",
"Foo/{controller}/{action}/{id}",
new { area = "Foo", controller = "Start", action = "Index", id = UrlParameter.Optional },
new { controller = new NotSubArea()},
new[] { typeof(StartController).Namespace }
);
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("PagesRoute", "Pages/{action}", new { controller = "Pages", Action "Index" }).DataTokens["UseNamespaceFallback"] = false;
routes.MapRoute("Default", // Route name
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { typeof(HomeController).Namespace }
).DataTokens["UseNamespaceFallback"] = false;
现在出现以下问题。当去网站/美孚/或网站/美孚/酒吧在这些页面上的链接生成正确使用:
!{Html.ActionLink<HomeController>(c => c.Index(),"Home", new { area = "Foo/Bar"})}
or
!{ Url.Action("Index", "Home", new { area = "Foo/Bar"}) } //or a different area
但是当我使用这在我的主要页面,换句话说网站/或网站/主页等。
!{Html.ActionLink<HomeController>(c => c.Index(),"Home", new { area = ""})}
or
!{ Url.Action("Index", "Home", new { area = ""}) }
//or with no area identifier specified
它生成Url:Website/Foo/Bar/Home等......哪一个是错的。
当我删除Foo/Bar的区域注册时,它全部重新运行。直接去到网站/首页/关于或网站/首页显示正确的页面,所以即时猜测内部UrlHelper挑选错误的路线来呈现。
我尝试切换FooBar_default和Foo_Default路由的顺序,以便Foo_default路由在FooBar_default路由之前注册,但是此区域不再工作(找不到资源)并且链接仍然生成不正确。
我觉得最奇怪的是,删除Foo/Bar注册可以解决问题。我希望有人可以在这个问题上提出一些见解..
将注册更改为Foo-Bar而不是使用/没有区别.. – Danthar 2010-07-19 10:17:08