private List <NavSiteMapNode> GetCachedNavNodes() { string cacheKey = "List_NavSiteMapNode_"; //+ WebHelper.GetCurrentUser().UserID; List <NavSiteMapNode> result = null; // result = (List<NavSiteMapNode>) HttpContext.Current.Cache[cacheKey]; if (result == null) { string mapFile = MapPath("~/sitemasterpage/navigator.sitemap"); SiteMapParser parser = new SiteMapParser(mapFile); NavSiteMap siteMap = parser.GetCachedMap(); result = GetNavNodesAfterCheck(siteMap); CacheDependency fileDependency = new CacheDependency(Server.MapPath(WebHelper.AuthCacheDependencyFile)); HttpContext.Current.Cache.Insert(cacheKey, result, fileDependency); } return(result); }
private List <NavSiteMapNode> GetNavNodesAfterCheck(NavSiteMap siteMap) { #region 修改Enable属性, 在前端渲染时根据Enable属性判断是否需要显示 List <NavSiteMapNode> result = new List <NavSiteMapNode>(); // 如果第二级没有可以显示, 则第一级不显示 foreach (NavSiteMapNode level1_item in siteMap.Nodes) { ////功能权限 if (!level1_item.Enable) { continue; } NavSiteMapNode menuNode_level1 = new NavSiteMapNode(level1_item); if (this.Request.Url.AbsoluteUri.ToLower().Contains(menuNode_level1.Url.ToLower())) { menuNode_level1.Selected = true; } menuNode_level1.Enable = false; //初始化, 根据是否有子级菜单决定是否显示 foreach (NavSiteMapNode level2_item in level1_item.Nodes) { if (level2_item.Enable == false) { continue; } NavSiteMapNode menuNode_level2 = new NavSiteMapNode(level2_item); foreach (NavSiteMapNode level3_item in level2_item.Nodes) { if (level3_item.Enable == false) { continue; } NavSiteMapNode menuNode_level3 = new NavSiteMapNode(level3_item); menuNode_level3.Enable = forceMenuShow || GetEnable(level3_item); if (menuNode_level3.Enable) { if (this.Request.Url.AbsoluteUri.ToLower().Contains(menuNode_level3.Url.ToLower())) { menuNode_level2.Selected = true; } menuNode_level2.Nodes.Add(menuNode_level3); menuNode_level2.Enable = true; } } menuNode_level2.Enable = forceMenuShow || GetEnable(level2_item); if (menuNode_level2.Enable) { if ((level2_item.Nodes.Count > 0 && menuNode_level2.Nodes.Count > 0) || level2_item.Nodes.Count == 0) { if (this.Request.Url.AbsoluteUri.ToLower().Contains(menuNode_level2.Url.ToLower()) || menuNode_level2.Selected) { menuNode_level1.Selected = true; } menuNode_level1.Nodes.Add(menuNode_level2); menuNode_level1.Enable = true; } } } if (!menuNode_level1.Enable && menuNode_level1.Url != "#" && GetEnable(menuNode_level1)) { menuNode_level1.Enable = true; } if (menuNode_level1.Enable) { result.Add(menuNode_level1); } } #endregion return(result); }