private void SortItem(Web.Models.MenuNodes node) { //var sorted = node.ChildNodes.OrderBy(r => r.Name).OrderByDescending(r => r.ChildNodes.Count > 0).ToList(); var sorted = node.ChildNodes.OrderByDescending(r => r.ChildNodes.Count > 0).ToList(); if (sorted.Count > 0) { foreach (var item in sorted) { SortItem(item); } node.ChildNodes.Clear(); node.ChildNodes.AddRange(sorted.ToArray()); } }
private void ProcessModule(List <Web.Models.MenuNodes> roots, Kmo.Web.Models.MenuViewModels model) { if (!string.IsNullOrEmpty(model.MenuPath)) { Web.Models.MenuNodes parent = null; foreach (var item in model.MenuPath.Split('/').Where(r => !string.IsNullOrEmpty(r))) { if (parent == null) { if (item.StartsWith("$Modules")) { Web.Models.MenuNodes rootChild = new Web.Models.MenuNodes(); rootChild.Name = model.Name; rootChild.IsFolder = false; rootChild.Icon = item.Split(':')[1]; rootChild.Path = model.Route; roots.Add(rootChild); return; } else { parent = roots.SingleOrDefault(r => r.Name == item.Split(':')[0]); if (parent == null) { parent = new Web.Models.MenuNodes(); parent.Name = item.Split(':')[0]; parent.IsFolder = true; parent.Icon = item.Split(':')[1]; parent.Path = model.Route; roots.Add(parent); } } } else { if (item.StartsWith("$Modules")) { parent.ChildNodes.Add(new Web.Models.MenuNodes { Name = model.Name, IsFolder = false, Icon = item.Split(':')[1], Path = model.Route }); return; } else { var nextParent = parent.ChildNodes.SingleOrDefault(r => r.Name == item.Split(':')[0]); if (nextParent == null) { nextParent = new Web.Models.MenuNodes(); nextParent.Name = item.Split(':')[0]; nextParent.IsFolder = true; nextParent.Icon = item.Split(':')[1]; nextParent.ParentNode = parent; parent.ChildNodes.Add(nextParent); } parent = nextParent; } } } } }