mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Fixing matching logic when looking for a menu item to select.
Items with route values (eg. ContentMenuItem) were omitted and not selected when viewing their child pages, non-existent in the menu. Eg. item pointing to a blog was not selected when one entered one of the blog posts (provided the blog post was not on a menu).
This commit is contained in:
@@ -91,22 +91,21 @@ namespace Orchard.UI.Navigation {
|
|||||||
return selectedPath;
|
return selectedPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool match = false;
|
// compare route values (if any) first
|
||||||
// if the menu item doesn't have route values, compare urls
|
bool match = menuItem.RouteValues != null && RouteMatches(menuItem.RouteValues, currentRouteData);
|
||||||
if (currentRequest != null && menuItem.RouteValues == null) {
|
|
||||||
|
// if route match failed, try comparing URL strings
|
||||||
|
if (currentRequest != null && !match) {
|
||||||
|
string appPath = currentRequest.ApplicationPath ?? "/";
|
||||||
|
string requestUrl = currentRequest.Path.StartsWith(appPath) ? currentRequest.Path.Substring(appPath.Length) : currentRequest.Path;
|
||||||
|
|
||||||
|
string modelUrl = menuItem.Href.Replace("~/", appPath);
|
||||||
|
modelUrl = modelUrl.StartsWith(appPath) ? modelUrl.Substring(appPath.Length) : modelUrl;
|
||||||
|
|
||||||
string requestUrl = currentRequest.Path.Replace(currentRequest.ApplicationPath ?? "/", string.Empty);
|
|
||||||
string modelUrl = menuItem.Href.Replace("~/", currentRequest.ApplicationPath);
|
|
||||||
modelUrl = modelUrl.Replace(currentRequest.ApplicationPath ?? "/", string.Empty);
|
|
||||||
if (requestUrl.Equals(modelUrl, StringComparison.OrdinalIgnoreCase) || (!string.IsNullOrEmpty(modelUrl) && requestUrl.StartsWith(modelUrl + "/", StringComparison.OrdinalIgnoreCase))) {
|
if (requestUrl.Equals(modelUrl, StringComparison.OrdinalIgnoreCase) || (!string.IsNullOrEmpty(modelUrl) && requestUrl.StartsWith(modelUrl + "/", StringComparison.OrdinalIgnoreCase))) {
|
||||||
match = true;
|
match = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if (RouteMatches(menuItem.RouteValues, currentRouteData)) {
|
|
||||||
match = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (match) {
|
if (match) {
|
||||||
menuItem.Selected = true;
|
menuItem.Selected = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user