我一直在寻找解决我的问题的方法。发现了很多类似的问题,但没有一个为我带来解决方案。
我正在尝试在一个区域内注册一个区域。这可行,但是它“部分”搞砸了我的路由。
我的路线注册按注册顺序进行,考虑 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;
现在出现以下问题。当转到 Website/Foo/ 或 Website/Foo/Bar 时,这些页面中的链接是使用以下方法正确生成的:
!{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 注册解决了这个问题。我希望有人可以对这个问题有所了解..