public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node) { var returnValue = new List<DynamicNode>(); try { //using (var uow = new MyDBContext()) using (var menuService = new SmMenuService<SysMenu>()) { // 取出所有Menu項 var menus = menuService.GetAll().ToList(); foreach (var menu in menus) { DynamicNode dynamicNode = new DynamicNode() { Title = menu.Name, ParentKey = menu.ParentId.HasValue ? menu.ParentId.Value.ToString() : "", Key = menu.SysMenuId.ToString(), Action = menu.Action, Controller = menu.Controller, Area = menu.Area, Url = menu.Url, //Roles = roles }; if (!string.IsNullOrWhiteSpace(menu.RouteValues)) { dynamicNode.RouteValues = menu.RouteValues.Split(',').Select(value => value.Split('=')) .ToDictionary(pair => pair[0], pair => (object)pair[1]); } returnValue.Add(dynamicNode); } } return returnValue; } catch (Exception ex) { return null; } }
public override IEnumerable <DynamicNode> GetDynamicNodeCollection(ISiteMapNode node) { var returnValue = new List <DynamicNode>(); CultureEnum cultureEnum = this.getCurrentCulture(); try { using (var menuService = new SmMenuService <SmMenu>(new SmDbContext())) using (var roleMenuService = new SmRoleMenuService <SmRoleMenu>(new SmDbContext())) { // 取出所有Menu項 var menus = menuService.GetAll().ToList(); //LogUtility.Logger.Debug($"The number of menus are {roleMenus.Count()}"); foreach (var menu in menus) { //取出該Menu對應那些Roles IList <String> roles = roleMenuService.Get(x => x.SmMenuId == menu.SmMenuId).ToList().Select(x => x.SmRole.Name).ToList(); DynamicNode dynamicNode = new DynamicNode() { // 顯示的文字 //Title = menu.Name, Title = this.getLocalizeTitle(menu, cultureEnum), // 父Menu項目Id ParentKey = menu.ParentId.HasValue ? menu.ParentId.Value.ToString() : "", // Node key Key = menu.SmMenuId.ToString(), // Action name Action = menu.Action, // Controller name Controller = menu.Controller, // Area name Area = menu.Area, // Url (只要有值就會以此為主) Url = menu.Url, // Roles Roles = roles }; if (!string.IsNullOrWhiteSpace(menu.RouteValues)) { var keyVals = Serializer.FromJson <List <KeyValuePair <String, String> > >(menu.RouteValues); dynamicNode.RouteValues = keyVals.ToDictionary(x => x.Key, x => (object)x.Value); } returnValue.Add(dynamicNode); } } LogUtility.Logger.Debug($"Node數量 = {returnValue.Count}!"); return(returnValue); } catch (Exception ex) { LogUtility.Logger.Error(ex, ex.Message); return(null); } }