.NET+Jquery+jquery.ztree 实现树状角色权限设置

效果图:

HTML代码:

   

    <td>权限选择:</td>
                                                                    <td style="text-align: left">
                                                                        <ul id="treeDemo" runat="server" class="ztree"></ul>
                                                                        <input type="hidden" id="hfRole" runat="server" />
                                                                    </td>


JS引用:

 

  <script src="assets/js/jquery-1.8.2.min.js"></script>
<link href="assets/zTreeStyle/zTreeStyle.css" rel="stylesheet" />
        <script src="assets/js/jquery.ztree.core-3.5.min.js"></script>
        <script src="assets/js/jquery.ztree.excheck-3.5.min.js"></script>
JS代码:

		<script type="text/javascript">

			var setting = {
				view: {
					selectedMulti: false
				},
				check: {
					enable: true
				},
				data: {
					key: {
						//将treeNode的ItemName属性当做节点名称
						name: "menuname"
					},
					simpleData: {
						//是否使用简单数据模式
						enable: true,
						//当前节点id属性  
						idKey: "menuid",
						//当前节点的父节点id属性 
						pIdKey: "fathermenuid",
						//用于修正根节点父节点数据,即pIdKey指定的属性值
						rootPId: 0
					}
				},
				callback: {
					beforeCheck: beforeCheck,
					onCheck: onCheck
				}
			};


			function beforeCheck(treeId, treeNode) {

				return (treeNode.doCheck !== false);
			}
			var arrayObj = new Array();
			function onCheck(e, treeId, treeNode) {
				if (treeNode.check_Child_State > 0) {
					arrayObj.push(treeNode.menuid);
					for (var i = 0; i < treeNode.children.length; i++) {
					  //	alert(treeNode.children[i].menuid + treeNode.children[i].menuname);

						arrayObj.push(treeNode.children[i].menuid);
					}
				}
				else {
                var fatherid;
					//选中则添加
                if (treeNode.checked == true) {
                	//不存在数组中
                	if (arrayObj.indexOf(treeNode.parentTId.split('_')[1]) == -1) {
                		fatherid = treeNode.parentTId.split('_')[1];
                		arrayObj.push(fatherid);
                	}
                	//var roleid = treeNode.parentTId.split('_')[1] + "," + treeNode.tId.split('_')[1];
                	//alert(roleid);
                	arrayObj.push(treeNode.menuid);
                	//alert(treeNode.menuid + treeNode.menuname);
                }
                	//去掉勾选则从数组中删除
                else {
                	//判断一个父节点取消则相应的子节点全部取消
                	if (treeNode.check_Child_State == 0) {
                		//先清除掉父节点然后循环去掉字节点的选中ID
                		RemoveRoleItem(treeNode.menuid);
                		
                		for (var i = 0; i < treeNode.children.length; i++) {
                		
                			RemoveRoleItem(treeNode.children[i].menuid);
                			
                		}
                	}//清除选中的子节点及父节点
                	else {
                		//1:		换成arrayObj无效
                		//var arr = [1, 10, 11, 12, 13, 14, 2, 3, 4, 5, 6, 7];
                		//arr.splice($.inArray(4, arr), 1);
                		//alert(arr);
                		//第二种方法移除
                		//arrayObj = $.grep(arrayObj, function (value) {
                		//	return value != treeNode.menuid;
                		//});
                		//第三种方法移除
                		RemoveRoleItem(treeNode.menuid);
				//父节点下面只有一个子节点处理(子节点取消,父节点保留)	后续再修改
                		var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
                		var node = treeObj.getNodeByParam("menuid", treeNode.fathermenuid);
                		node.checked = true;
                		treeObj.updateNode(node);
            
                	}
                }
				}
				//定义了sort的比较函数
				arrayObj = arrayObj.sort(function (a, b) {
					return a - b;
				});
			  //	alert(arrayObj.toString());
				$("#hfRole").val('');
				$("#hfRole").val(arrayObj.toString());
			}
			//获取URL请求参数
			function getQueryString(name) {
				var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
				var r = window.location.search.substr(1).match(reg);
				if (r != null) return unescape(r[2]); return null;
			}
			function RemoveRoleItem(name) {
				for (var i = 0; i < arrayObj.length; i++) {
					if (arrayObj[i] == name) {
						arrayObj.splice(i, 1);	//从下标为i的元素开始,连续删除1个元素
						i--;//因为删除下标为i的元素后,该位置又被新的元素所占据,所以要重新检测该位置
					}
				}
			}
			$(function () {
				$.post("UserRoleSet.aspx", function (json) {
					var treeObj = $.fn.zTree.init($("#treeDemo"), setting, json);
					//默认展开所有节点
					treeObj.expandAll(false);

					//如果地址有参数时则为修改选中状态
					if (getQueryString("upid") != null) {
						var treeObj = $.fn.zTree.getZTreeObj("treeDemo");
						arrayObj = $("#hfRole").val().split(',');
						//var mid = $("#hfRole").val().split(',');
						for (var i = 0; i < arrayObj.length; i++) {
						    var node = treeObj.getNodeByParam("menuid", arrayObj[i]);
							node.checked = true;
							treeObj.updateNode(node);

						}
					}

				});
			});

		</script>

C# 代码:

		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{
				//在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)
				if (Request.Headers["X-Requested-With"] != null && Request.Headers["X-Requested-With"].ToLower() == "XMLHttpRequest".ToLower())
				{
					//清除缓冲区流中的所有内容输出
					Response.Clear();
					//设置输出流的HTTP MIMEl类型
					Response.ContentType = "application/json";
					//将一个字符串写入HTTP相应输出流
					Response.Write(GetJson());
					//将当前所有缓冲的输出发送到客户端,停止该页的执行
					Response.End();
				}
				HttpCookie getCookies = Request.Cookies["UserLogin"];
				if (getCookies != null)
				{	if (!string.IsNullOrEmpty(Request["upid"]))
					{
						if (GoodLookManager.model.SearchDataClass.IsNumber(Request["upid"]) == true)
						                      
                       this.BindShowUpInfo(Request["upid"]);
}}else{ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>alert('请登录在进行查询。');window.location.href='Login.aspx';</script>");}}}//序列化,将对象转化为JSON字符串protected string GetJson(){//为启用 AFAX 的应用程序提供序列化和反序列化功能System.Web.Script.Serialization.JavaScriptSerializer json = new System.Web.Script.Serialization.JavaScriptSerializer();List<MenuList> list = new List<MenuList>();//获取管理员模块列表using (GoodLookDataContext db = new GoodLookDataContext()){list = (from p in db.menulist where p.isshow=='Y' select new MenuList { menuid = p.menuid, menuname = p.menuname, fathermenuid = p.fathermenuid }).ToList<MenuList>();}//将对象转换为JSON字符串 return json.Serialize(list);}
    public void BindShowUpInfo(string strUpid)
        {
            if (!string.IsNullOrEmpty(strUpid))
            {
                if (GoodLookManager.model.SearchDataClass.IsNumber(strUpid) == true)
                    using (GoodLookDataContext db = new GoodLookDataContext())
                    {
                        userrole getNot = db.userrole.Single(x => x.roleid == int.Parse(strUpid));
                        txtRoleName.Value = getNot.rolename;
                        txtFckContent.Value = getNot.roledescribe;
//赋值给隐藏域,以便树状绑定选中状态。
                        hfRole.Value = getNot.powerid;
                    }
            }
        }
public class MenuList
        {
            public int? menuid { get; set; }
            public string menuname { get; set; }
            public int fathermenuid { get; set; }
        }

 修改前效果: 

修改后效果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值