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容器里面。