知识大全 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.NET 2.0的编译模型

ASP.NET2.0的编译模型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  支持两种编译模型(

知识大全 体验ASP.NET 2.0中的BuildProvider

体验ASP.NET2.0中的BuildProvider  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Asp.net 2.0 自定义控件开发

Asp.net2.0自定义控件开发  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (一)概述  

知识大全 ASP.NET 2.0运行时简要分析

ASP.NET2.0运行时简要分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!概述: 

知识大全 ASP.NET 2.0异步页面原理浅析

ASP.NET2.0异步页面原理浅析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  与ASPNE