• 用sitemap做主页的菜单栏


    首先打开vs--> 新建项-->选择站点地图.

    站点地图建好了  其中具体的节点根据自己情况配好就行。

    接下来是两个非常重要的类:

    using System.Collections.Generic;
    using System.Web.Routing;
    
    //code from Telerik MVC Extensions
    namespace PowerInspact.Menu
    {
        public class SiteMapNode
        {
            /// <summary>
            /// Initializes a new instance of the <see cref="SiteMapNode"/> class.
            /// </summary>
            public SiteMapNode()
            {
                RouteValues = new RouteValueDictionary();
                ChildNodes = new List<SiteMapNode>();
            }
    
            /// <summary>
            /// Gets or sets the title.
            /// </summary>
            /// <value>The title.</value>
            public string Title { get; set; }
    
            /// <summary>
            /// Gets or sets the name of the controller.
            /// </summary>
            /// <value>The name of the controller.</value>
            public string ControllerName { get; set; }
    
            /// <summary>
            /// Gets or sets the name of the action.
            /// </summary>
            /// <value>The name of the action.</value>
            public string ActionName { get; set; }
    
            /// <summary>
            /// Gets or sets the route values.
            /// </summary>
            /// <value>The route values.</value>
            public RouteValueDictionary RouteValues { get; set; }
    
            /// <summary>
            /// Gets or sets the URL.
            /// </summary>
            /// <value>The URL.</value>
            public string Url { get; set; }
    
            /// <summary>
            /// Gets or sets the child nodes.
            /// </summary>
            /// <value>The child nodes.</value>
            public IList<SiteMapNode> ChildNodes { get; set; }
    
            /// <summary>
            /// Gets or sets the image path
            /// </summary>
            /// <value>The name of the image path.</value>
            public string ImageUrl { get; set; }
    
            /// <summary>
            /// Gets or sets the item is visible
            /// </summary>
            /// <value>A value indicating whether the item is visible</value>
            public bool Visible { get; set; }
        }
    }
    //code from Telerik MVC Extensions
    
    using System;
    using System.IO;
    using System.Linq;
    using System.Web.Routing;
    using System.Xml;
    namespace PowerInspact.Menu
    {
        public class XmlSiteMap
        {
            public XmlSiteMap()
            {
                RootNode = new SiteMapNode();
            }
    
            public SiteMapNode RootNode { get; set; }
    
            public virtual SiteMapNode LoadFrom(string physicalPath)
            {
                string str = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
                string content = File.ReadAllText(str + physicalPath);
    
                if (!string.IsNullOrEmpty(content))
                {
                    using (var sr = new StringReader(content))
                    {
                        using (var xr = XmlReader.Create(sr,
                                new XmlReaderSettings
                                {
                                    CloseInput = true,
                                    IgnoreWhitespace = true,
                                    IgnoreComments = true,
                                    IgnoreProcessingInstructions = true
                                }))
                        {
                            var doc = new XmlDocument();
                            doc.Load(xr);
    
                            if ((doc.DocumentElement != null) && doc.HasChildNodes)
                            {
                                XmlNode xmlRootNode = doc.DocumentElement.FirstChild;
                                Iterate(RootNode, xmlRootNode);
                            }
                        }
                    }
                }
                return RootNode;
            }
    
            private static void Iterate(SiteMapNode siteMapNode, XmlNode xmlNode)
            {
                PopulateNode(siteMapNode, xmlNode);
    
                foreach (XmlNode xmlChildNode in xmlNode.ChildNodes)
                {
                    if (xmlChildNode.LocalName.Equals("siteMapNode", StringComparison.InvariantCultureIgnoreCase))
                    {
                        var siteMapChildNode = new SiteMapNode();
                        siteMapNode.ChildNodes.Add(siteMapChildNode);
    
                        Iterate(siteMapChildNode, xmlChildNode);
                    }
                }
            }
    
            private static void PopulateNode(SiteMapNode siteMapNode, XmlNode xmlNode)
            {
                try
                {
                      //title
                siteMapNode.Title = GetStringValueFromAttribute(xmlNode, "title");
                //routes, url
                string controllerName = GetStringValueFromAttribute(xmlNode, "controller");
                string actionName = GetStringValueFromAttribute(xmlNode, "action");
                string url = GetStringValueFromAttribute(xmlNode, "url");
                if (!string.IsNullOrEmpty(controllerName) && !string.IsNullOrEmpty(actionName))
                {
                    siteMapNode.ControllerName = controllerName;
                    siteMapNode.ActionName = actionName;
    
                }
                else if (!string.IsNullOrEmpty(url))
                {
                    siteMapNode.Url = url;
                }
    
                //image URL
                siteMapNode.ImageUrl = GetStringValueFromAttribute(xmlNode, "ImageUrl");
    
                //permission name
                var permissionNames = GetStringValueFromAttribute(xmlNode, "PermissionNames");
    
    
              string pers=System.Web.HttpContext.Current.Session["persioons"].ToString();
    
              string[] arr1 = pers.Substring(0, pers.Length-1).Split(',');  //当前该用户的权限
    
              if (siteMapNode.Title == "组织/企业管理" || siteMapNode.Title == "检测报告" || siteMapNode.Title == "系统设置" || siteMapNode.Title == "标准库" || siteMapNode.Title == "用户设置")
                {
                    string[] arr = permissionNames.Split(',');
                    if (IsVisible(arr, arr1))
                    {
                        siteMapNode.Visible = true;
                    }
                    else
                    {
                        siteMapNode.Visible = false; ;
                    }
                }
                else
                {
                    if (IsVisible(arr1, permissionNames))
                    {
                        siteMapNode.Visible = true;
                    }
                    else
                    {
                        siteMapNode.Visible = false; ;
                    }
                }
                }
                catch (Exception)
                {
                }
    
            }
            public static bool IsVisible(string[] arr, string[] arr1)
            {
                bool b = false;
                for (int i = 0; i < arr.Length; i++)
                {
                    for (int j = 0; j < arr1.Length; j++)
                    {
                        if (arr[i] == arr1[j])
                        {
                            b = true;
                            break;
                        }
                    }
                }
                return b;
            }
            public static bool IsVisible(string[] arr, string permissionNames)
            {
                bool b = false;
                for (int i = 0; i < arr.Length; i++)
                {
                    if (permissionNames == arr[i])
                    {
                        b = true;
                        break;
                    }
                }
                return b;
            }
            private static string GetStringValueFromAttribute(XmlNode node, string attributeName)
            {
                string value = null;
    
                if (node.Attributes.Count > 0)
                {
                    XmlAttribute attribute = node.Attributes[attributeName];
    
                    if (attribute != null)
                    {
                        value = attribute.Value;
                    }
                }
    
                return value;
            }
        }
    }

    这两个类完全可以直接拿去用,只是第二个类里面有一些判断要改一下(登陆成功是否显示),其他都不用动。

    最后来看看在母版页里如何调用:

    <!-- 左边菜单栏 style can be found in sidebar.less -->
                    <ul class="sidebar-menu" data-widget="tree">
                        <li class="header">MAIN NAVIGATION</li>
                       
                        @{
                               string strUrl = Request.Url.ToString();
                                //load sitemap   注意命名空间
                                var siteMap = new PowerInspact.Menu.XmlSiteMap();
                                PowerInspact.Menu.SiteMapNode Nodes = siteMap.LoadFrom("sitemap.config");  //注意站点地图路劲
                                string str = "";
                                if (Nodes.ChildNodes.Count > 0)
                                {
    
                                    
                                    for (int i = 0; i < Nodes.ChildNodes.Count; i++) //父级
                                    {
                                        if (Nodes.ChildNodes[i].Visible)
                                        {
                                            bool IsActive=false;
                                            string[] Persionns = Nodes.ChildNodes[i].ImageUrl.ToString().Split(',');
                                            for (int k = 0; k < Persionns.Length; k++)
                                            {
                                                if (strUrl.Contains(Persionns[k]))
                                                {
                                                    IsActive = true;
                                                }
                                            }
                                            
                                            string ico = "";
                                            if (IsActive)
                                            {
                                                ico = "fa-suitcase";
                                                str += " <li class='active treeview'>";
                                            }
                                            else
                                            {
                                                ico = "fa-cogs";
                                                str += " <li class='treeview'>";
                                            }
                                            if (Nodes.ChildNodes[i].ChildNodes.Count > 0) //子级fa fa-cogs   fa-suitcase
                                            {
    
                                                str += "<a href='#'><i class='fa "+ico+"'></i><span>" + Nodes.ChildNodes[i].Title + "</span><span class='pull-right-container'><i class='fa fa-angle-left pull-right'></i></span></a>";
                                                str += "<ul class='treeview-menu left_menu'>";
                                                for (int j = 0; j < Nodes.ChildNodes[i].ChildNodes.Count; j++)
                                                {
                                                    if (Nodes.ChildNodes[i].ChildNodes[j].Visible)
                                                    {
                                                        if (strUrl.Contains(Nodes.ChildNodes[i].ChildNodes[j].ControllerName))
                                                        {
                                                            str += @"<li class='active'><a href='/" + Nodes.ChildNodes[i].ChildNodes[j].ControllerName + "'><i class='fa fa-circle-o'></i>" + Nodes.ChildNodes[i].ChildNodes[j].Title + "</a></li>";
                                                        }
                                                        else
                                                        {
                                                            str += @"<li><a href='/" + Nodes.ChildNodes[i].ChildNodes[j].ControllerName + "'><i class='fa fa-circle-o'></i>" + Nodes.ChildNodes[i].ChildNodes[j].Title + "</a></li>";
                                                        }
                                                       
                                                        
                                                        
                                                    }
                                                }
                                                str += "</ul>";
                                            }
                                            str += "</li>";
                                            
                                            
                                            
                                            
                                        }
                                    }
    
                                }
    
                                ViewData["strhtnl"] = str;
                            }
                            @Html.Raw(ViewData["strhtnl"])</ul>
  • 相关阅读:
    MongoDB副本集集群,golang与Java连接不同
    dockercompose部署Redis哨兵模式集群
    dockercompose部署minio与Prometheus
    redis哨兵模式集群搭建
    dockercompose kafka集群部署,kafkamanager可视化访问页面增加用户密码校验
    redis
    Prometheus部署监控Minio指标
    换电脑快捷同步vscode插件和配置
    【转】过滤不可见字符
    js解析base64
  • 原文地址:https://www.cnblogs.com/bin521/p/8718370.html
Copyright © 2020-2023  润新知