diff --git a/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs b/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs index e04863c6c..fd04e6122 100644 --- a/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs +++ b/src/Orchard.Web/Core/Navigation/Services/MainMenu.cs @@ -22,19 +22,14 @@ namespace Orchard.Core.Navigation.Services { MenuPart part = menuPart; if (part.Is()) - builder.Add(menu => menu.Add(part.MenuText, part.MenuPosition, part.As().Url)); + builder.Add( + menu => menu.Add(part.MenuText, part.MenuPosition, nib => nib.Url(part.As().Url))); else builder.Add( menu => menu.Add(part.MenuText, part.MenuPosition, nib => - nib.Action( - part.ContentItem.ContentManager.GetItemMetadata(part.ContentItem). - DisplayRouteValues["action"] as string, - part.ContentItem.ContentManager.GetItemMetadata(part.ContentItem). - DisplayRouteValues["controller"] as string, - part.ContentItem.ContentManager.GetItemMetadata(part.ContentItem). - DisplayRouteValues))); + nib.Action(_contentManager.GetItemMetadata(part.ContentItem).DisplayRouteValues))); } } } diff --git a/src/Orchard/UI/Navigation/MenuItemComparer.cs b/src/Orchard/UI/Navigation/MenuItemComparer.cs index b5339c029..256596f1e 100644 --- a/src/Orchard/UI/Navigation/MenuItemComparer.cs +++ b/src/Orchard/UI/Navigation/MenuItemComparer.cs @@ -7,6 +7,9 @@ namespace Orchard.UI.Navigation { if (!string.Equals(x.Text, y.Text)) { return false; } + if (!string.Equals(x.Url, y.Url)) { + return false; + } if (x.RouteValues != null || y.RouteValues != null) { if (x.RouteValues == null || y.RouteValues == null) { return false; @@ -32,6 +35,9 @@ namespace Orchard.UI.Navigation { if (obj.Text != null) { hash ^= obj.Text.GetHashCode(); } + if (obj.Url != null) { + hash ^= obj.Url.GetHashCode(); + } if (obj.RouteValues != null) { foreach (var item in obj.RouteValues) { hash ^= item.Key.GetHashCode() ^ item.Value.GetHashCode(); diff --git a/src/Orchard/UI/Navigation/NavigationBuilder.cs b/src/Orchard/UI/Navigation/NavigationBuilder.cs index bdda97c55..04de7feb4 100644 --- a/src/Orchard/UI/Navigation/NavigationBuilder.cs +++ b/src/Orchard/UI/Navigation/NavigationBuilder.cs @@ -8,7 +8,7 @@ namespace Orchard.UI.Navigation { public class NavigationBuilder { IEnumerable Contained { get; set; } - public NavigationBuilder Add(string caption, string position, string url, Action itemBuilder) { + public NavigationBuilder Add(string caption, string position, Action itemBuilder) { var childBuilder = new NavigationItemBuilder(); if (!string.IsNullOrEmpty(caption)) @@ -17,31 +17,22 @@ namespace Orchard.UI.Navigation { if (!string.IsNullOrEmpty(position)) childBuilder.Position(position); - if (!string.IsNullOrEmpty(url)) - childBuilder.Url(url); - itemBuilder(childBuilder); Contained = (Contained ?? Enumerable.Empty()).Concat(childBuilder.Build()); return this; } - public NavigationBuilder Add(string caption, string position, Action itemBuilder) { - return Add(caption, position, null, itemBuilder); - } public NavigationBuilder Add(string caption, Action itemBuilder) { - return Add(caption, null, null, itemBuilder); + return Add(caption, null, itemBuilder); } public NavigationBuilder Add(Action itemBuilder) { - return Add(null, null, null, itemBuilder); - } - public NavigationBuilder Add(string caption, string position, string url) { - return Add(caption, position, url, x=> { }); + return Add(null, null, itemBuilder); } public NavigationBuilder Add(string caption, string position) { - return Add(caption, position, null, x=> { }); + return Add(caption, position, x=> { }); } public NavigationBuilder Add(string caption) { - return Add(caption, null, null, x => { }); + return Add(caption, null, x => { }); } public IEnumerable Build() { @@ -81,6 +72,12 @@ namespace Orchard.UI.Navigation { return new[] { _item }; } + public NavigationItemBuilder Action(RouteValueDictionary values) { + return values != null + ? Action(values["action"] as string, values["controller"] as string, values) + : Action(null, null, new RouteValueDictionary()); + } + public NavigationItemBuilder Action(string actionName) { return Action(actionName, null, new RouteValueDictionary()); }