11.MVC关系(为树节点添加url)1

数据库:权限表ou_permission表有:PAreaName,pActionName,pFormMethod,三个加到一起就是要请求的url.

***url给那里赋值:attributes赋值。现在treeNode节点就有url,到时候在浏览器端通过attributes属性名url拿到要加载的菜单。

=============================1.树节点添加url,熟悉下treeNode================

            /// <summary>
            /// 获取当前登陆用户的权限树Json字符串+UsrPermissionTree
           /// </summary>

             public string UsrPermissionTree

        {
            get
            {
                if (Session[Admin_TreeString] == null || string.IsNullOrEmpty(UsrPermissionTree))//session是 null或者 是空
                {
                    //将 登陆用户的 权限集合 转成 树节点 集合(其中 IsShow = false的不要生成到树节点集合中)
                 List<MODEL.EasyUIModel.TreeNode> listTree = MODEL.Ou_Permission.ToTreeNodes(UsrPermission.Where(p => p.pIsShow == true).ToList());//p.pIsShow == true过滤要显示的
                 Session[Admin_TreeString] = Common.DataHelper.Obj2Json(listTree);//树形菜单只有一个:session
                }
                return Session[Admin_TreeString].ToString();
            }
          } 
           public List<MODEL.Ou_Permission> UsrPermission
          {
            get
            {
                return Session[Admin_PermissionKey] as List<MODEL.Ou_Permission>;
            }
            set
            {
                Session[Admin_PermissionKey] = value;
            }
         }

把权限遍历成treeNode节点。

 public partial class Ou_Permission
    { 
public TreeNode ToNode()
        {
            TreeNode node = new TreeNode()
            {
                id = this.pid,
                text = this.pName,
                state = "open",
                Checked = false,
                attributes = null,
                children = new List<TreeNode>()
            };
            return node;
        }
 
 #region 2.0 将 权限集合 转成 树节点集合 +List<MODEL.EasyUIModel.TreeNode> ToTreeNodes(List<Ou_Permission> listPer)
        /// <summary>
        /// 将 权限集合 转成 树节点集合
        /// </summary>
        /// <param name="listPer"></param>
        /// <returns></returns>
        public static List<MODEL.EasyUIModel.TreeNode> ToTreeNodes(List<Ou_Permission> listPer)
        {
            List<MODEL.EasyUIModel.TreeNode> listNodes = new List<EasyUIModel.TreeNode>();
            //生成 树节点时,根据 pid=0的根节点 来生成
            LoadTreeNode(listPer, listNodes, 0);
            return listNodes;
        }
        #endregion
        /// <summary>
        /// 递归权限集合 创建 树节点集合
        /// </summary>
        /// <param name="listPer">权限集合</param>
        /// <param name="listNodes">节点集合</param>
        /// <param name="pid">节点父id</param>
        public static void LoadTreeNode(List<Ou_Permission> listPer,List<TreeNode> listNodes,int pid)
        {
            foreach (var permission in listPer)
            {
                //如果权限 的父id 参数一样,将 权限转成 树节点
                if (permission.pParent == pid)
                {
                    //将 权限转成 树节点
                    TreeNode node = permission.ToNode();
                    //将节点加入到树节点集合
                    listNodes.Add(node);
                    //递归 为这个新创建的树节点找 子节点
                    LoadTreeNode(listPer, node.children, node.id);
                }
            }
        }
}

=======================2.为treeNode树节点添加url属性====================

将当前权限的 区域名+控制器名+Action方法名 合并成一个url返回。

***url给那里赋值:

           *1.treeNode节点属性attributes赋值url。

           *2.现在treeNode节点就有url;

           *3.到时候在浏览器端通过attributes属性名url拿到要加载的菜单。

*直接拼接太简单了,关键是里面有一些空值,所以就会出问题的。如:public string Geturl() { return this.pActionName + "/" + this.pAreaName + "/" + this.pControllerName;}

 ***pAreaName:区域名;// pControllerName:控制器名; //pActionName: 控制器acton方法名

 ***如果区域名为空还好,控制器+action方法也可以组成一个url。

using MODEL.EasyUIModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MODEL
{
    public partial class Ou_Permission
    {
//2.0将当前权限 对象 转成树节点对象+TreeNode ToNdode()
public TreeNode ToNode() { TreeNode node = new TreeNode() { id = this.pid, text = this.pName, state = "open", Checked = false, attributes = new { url=this.Geturl()}, children = new List<TreeNode>() }; return node; } /// <summary> /// 将当前权限的 区域名+控制器名+Action方法名 合并成一个url返回 /// </summary> /// <returns></returns> public string Geturl() { //可以直接拼接,但是数据里有的是空,会出问题的,所以暂时return ""; // return this.pActionName + "/" + this.pAreaName + "/" + this.pControllerName; return ""; }

 ============3.为treeNode树节点添加url属性,判断区域名,控制器名,控制器action方法为空或nll,返回的处理==================

 

 ***pAreaName:区域名;// pControllerName:控制器名; //pActionName: 控制器acton方法名

 ***如果区域名为空还好,控制器+action方法也可以组成一个url。

      1.如果  区域名+控制器+action方法是null,返回"";

      2.不是null则返回url;

using MODEL.EasyUIModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MODEL
{
    public partial class Ou_Permission
    {

        public TreeNode ToNode()
        {
            TreeNode node = new TreeNode()
            {
                id = this.pid,
                text = this.pName,
                state = "open",
                Checked = false,
                attributes = new { url=this.Geturl()},
                children = new List<TreeNode>()
            };
            return node;
        }
 /// <summary>
        /// 1.将当前权限的 区域名+控制器名+Action方法名 合并成一个url返回
        /// </summary>
        /// <returns></returns>
        public string Geturl()
        {
            return GetUrlPart( this.pActionName) + "/" +GetUrlPart( this.pAreaName )+ "/" +GetUrlPart(this.pControllerName);
           // return "";
        }
        /// <summary>
        /// 1.1判断url是否为空:如果是空返回“”,负责返回url.
        /// </summary>
        /// <param name="urlPart"></param>
        /// <returns></returns>
        protected string GetUrlPart(string urlPart)
        {
           return string.IsNullOrEmpty(urlPart)?"":"/"+urlPart;//url是不是空,是空返回”“,负责返回url;
        }
        #region 2.0 将 权限集合 转成 树节点集合 +List<MODEL.EasyUIModel.TreeNode> ToTreeNodes(List<Ou_Permission> listPer)
        /// <summary>
        /// 将 权限集合 转成 树节点集合
        /// </summary>
        /// <param name="listPer"></param>
        /// <returns></returns>
        public static List<MODEL.EasyUIModel.TreeNode> ToTreeNodes(List<Ou_Permission> listPer)
        {
            List<MODEL.EasyUIModel.TreeNode> listNodes = new List<EasyUIModel.TreeNode>();
            //生成 树节点时,根据 pid=0的根节点 来生成
            LoadTreeNode(listPer, listNodes, 0);
            return listNodes;
        }
        #endregion
        /// <summary>
        /// 递归权限集合 创建 树节点集合
        /// </summary>
        /// <param name="listPer">权限集合</param>
        /// <param name="listNodes">节点集合</param>
        /// <param name="pid">节点父id</param>
        public static void LoadTreeNode(List<Ou_Permission> listPer,List<TreeNode> listNodes,int pid)
        {
            foreach (var permission in listPer)
            {
                //如果权限 的父id 参数一样,将 权限转成 树节点
                if (permission.pParent == pid)
                {
                    //将 权限转成 树节点
                    TreeNode node = permission.ToNode();
                    //将节点加入到树节点集合
                    listNodes.Add(node);
                    //递归 为这个新创建的树节点找 子节点
                    LoadTreeNode(listPer, node.children, node.id);
                }
            }
        }
    }
}

 在工具中看attritbutes属性中的url

 

url被树形菜单拿到,放到easyui里面。怎么看了,系统日志:左键审查元素。easyui就像个容器,存在里面了。其实使用了easyui创建的控件都存入了easyui容器里面。

 

posted @ 2017-03-28 14:58  狼牙者.net  阅读(648)  评论(0)    收藏  举报