知识大全 asp.net 2.0 权限树的控制
Posted 知
篇首语:少而好学,如日出之阳;壮而好学,如日中之光;老而好学,如炳烛之明。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 asp.net 2.0 权限树的控制相关的知识,希望对你有一定的参考价值。
做权限的时候 主要实现如下功能 该节点可以访问 则他的父节点也必能访问 该节点可以访问 则他的子节点也都能访问 该节点不可访问 则他的子节点也不能访问 使用带CheckBox的数型结构能得到很好的用户体验 可是编程的难度也是有点增加 如果全部有服务端来完成 那点下刷下 肯定不行 只能使用javascript javascript调试的时候郁闷的很 一个字类 还有郁闷的递归 麻烦 我以前是使用以下该方法 <script language= javascript > <! //初始化节点 initchecknode(document all( tvItemClientID ) value document all( checked ) value)
//初始化选中节点 function initchecknode(tree tvvalue) //获得需要初始化选择状态的节点的字符串 var selectedNodes = tvvalue; var arrayNodes = new Array(); arrayNodes = selectedNodes split( ); var AllRootNode=new Array(); AllRootNode=document getElementById(tree) getChildren(); //初始化选择的节点 findAndCheckedNodes(AllRootNode arrayNodes);
//根据已选择的节点的字符串初始化选择的节点 function findAndCheckedNodes(NodeArray nodeDatas) //alert(NodeArray length); if(parseInt(NodeArray length)== ) return; else for(var i= ;i<parseInt(NodeArray length);i++) var cNode nodeData; cNode=NodeArray[i]; ////如果该节点在nodeDatas里则初始化checked = true; nodeData = cNode getAttribute( NodeData ); for(var j= ;j<nodeDatas length;j++) if(nodeDatas[j] == nodeData) cNode setAttribute( checked true ); break; //如果有子节点 则继续递归 if(parseInt(cNode getChildren() length)!= ) findAndCheckedNodes(cNode getChildren() nodeDatas); // > //oncheck事件 function tree_oncheck(tree) var i; var node=tree getTreeNode(tree clickedNodeIndex); var Pchecked=tree getTreeNode(tree clickedNodeIndex) getAttribute( checked ); setcheck(node Pchecked); setParent(node Pchecked); //window alert(Pchecked); document all checked value = ; if (tree getChildren() length > ) for (i= ;i<=tree getChildren() length ;i++) if (tree getChildren()[i] getAttribute( Checked )) AddChecked(tree getChildren()[i]); FindCheckedFromNode(tree getChildren()[i]); //设置子节点选中
function setcheck(node Pchecked) var i; var ChildNode=new Array(); ChildNode=node getChildren();
if(parseInt(ChildNode length)== ) return; else for(i= ;i<ChildNode length;i++) var cNode; cNode=ChildNode[i]; cNode setAttribute( Checked Pchecked); //cNode Checked = Pchecked; if(parseInt(cNode getChildren() length)!= ) setcheck(cNode Pchecked);
//设置子节点选中/取消; //同时需要设置父节点的状态(如果是取消选中的话 仅仅设置本节点及其所有字接点 不涉及父接点) function setParent(node Pc) var parentNode = node getParent();
if(parentNode)
var parentNodeFather = parentNode getParent();
if(parentNodeFather) setParent(parentNode Pc); if(Pc) parentNode setAttribute( checked Pc); else checkBrother(parentNode Pc node getAttribute( NodeData ))
//检查子接点是否有选择的 如果有一个选择了 那返回true //只查第一级节点 function checkBrother(parentNode Pc NodeData) var childNodes = new Array(); childNodes = parentNode getChildren(); if(childNodes length > ) var bChecked = true; for(var i= ;i<childNodes length;i++) if(childNodes[i] getAttribute( checked ) == true && childNodes[i] getAttribute( NodeData ) != NodeData) //alert(i+childNodes[i] getAttribute( Text )); bChecked = false; break; if(bChecked) parentNode setAttribute( checked Pc); else //所有父结点选择 setParent(parentNode !Pc) else parentNode setAttribute( checked Pc);
//获取所有节点状态 function FindCheckedFromNode(node) var i = ; var nodes = new Array(); nodes = node getChildren();
for (i = ; i <= nodes length ; i++) if (nodes[i] getAttribute( Checked )) AddChecked(nodes[i]); if (parseInt(nodes[i] getChildren() length) != ) FindCheckedFromNode(nodes[i]); //添加选中节点 function AddChecked(node) document all checked value += node getAttribute( NodeData ) + ;
// > </script>这种方法有个很大的问题 就是他客户端设置的CheckBox在服务器端是不能获取的 现在只能在Check的时候遍历树 并把Checked的值放在一个文本里 然后提交到服务器 然后服务器来解析 @ @这种字符 现在我使用的是 使用的是以下的方法 function public_GetParentByTagName(element tagName) var parent = element parentNode; var upperTagName = tagName toUpperCase(); //如果这个元素还不是想要的tag就继续上溯 while (parent && (parent tagName toUpperCase() != upperTagName)) parent = parent parentNode ? parent parentNode : parent parentElement; return parent;
//设置节点的父节点Cheched——该节点可访问 则他的父节点也必能访问 function setParentChecked(objNode) var objParentDiv = public_GetParentByTagName(objNode div ); if(objParentDiv==null || objParentDiv == undefined ) return; var objID = objParentDiv getAttribute( ID ); objID = objID substring( objID indexOf( Nodes )); objID = objID+ CheckBox ; var objParentCheckBox = document getElementById(objID); if(objParentCheckBox==null || objParentCheckBox == undefined ) return; if(objParentCheckBox tagName!= INPUT && objParentCheckBox type == checkbox ) return; objParentCheckBox checked = true; setParentChecked(objParentCheckBox);
//设置节点的子节点uncheched——该节点不可访问 则他的子节点也不能访问 function setChildUnChecked(divID) var objchild = divID children; var count = objchild length; for(var i= ;i<objchild length;i++) var tempObj = objchild[i]; if(tempObj tagName== INPUT && tempObj type == checkbox ) tempObj checked = false; setChildUnChecked(tempObj);
//设置节点的子节点cheched——该节点可以访问 则他的子节点也都能访问 function setChildChecked(divID) var objchild = divID children; var count = objchild length; for(var i= ;i<objchild length;i++) var tempObj = objchild[i]; if(tempObj tagName== INPUT && tempObj type == checkbox ) tempObj checked = true; setChildChecked(tempObj);
//触发事件 function CheckEvent()
var objNode = event srcElement;
if(objNode tagName!= INPUT || objNode type!= checkbox ) return;
if(objNode checked==true) setParentChecked(objNode); var objID = objNode getAttribute( ID ); var objID = objID substring( objID indexOf( CheckBox )); var objParentDiv = document getElementById(objID+ Nodes ); if(objParentDiv==null || objParentDiv == undefined ) return; setChildChecked(objParentDiv); else var objID = objNode getAttribute( ID ); var objID = objID substring( objID indexOf( CheckBox )); var objParentDiv = document getElementById(objID+ Nodes ); if(objParentDiv==null || objParentDiv == undefined ) return; setChildUnChecked(objParentDiv);
这种方法最大的好处就是服务端能得javascript设置的Checked的值 不用没点下就全部把树遍利下 直接在服务端遍利一次就行了 //遍历子节点 public void GetChildNode(TreeNode Node) foreach (TreeNode node in Node ChildNodes) if (node Checked) StrChecked += node Value+ @ ; GetChildNode(node); 我照样能得到它的Check的值 cha138/Article/program/net/201311/13498相关参考
知识大全 如何由ASP.NET 1.1移植到ASP.NET 2.0
如何由ASP.NET1.1移植到ASP.NET2.0 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 浅谈ASP.NET MVC Membership权限机制
浅谈ASP.NETMVCMembership权限机制 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ASP.NET入门教程 7.2 ASP.NET 2.0的数据控件
ASP.NET入门教程7.2ASP.NET2.0的数据控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一
知识大全 ASP.NET入门教程 10.5.3 ASP.NET 2.0的新特性[2]
ASP.NET入门教程10.5.3ASP.NET2.0的新特性[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
知识大全 ASP.NET入门教程 10.5.3 ASP.NET 2.0的新特性[1]
ASP.NET入门教程10.5.3ASP.NET2.0的新特性[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
ASP.NET2.0的编译模型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 支持两种编译模型(
知识大全 体验ASP.NET 2.0中的BuildProvider
体验ASP.NET2.0中的BuildProvider 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Asp.net2.0自定义控件开发 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! (一)概述
ASP.NET2.0运行时简要分析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!概述:
ASP.NET2.0异步页面原理浅析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 与ASPNE