亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

asp.net 2.0 權限樹的控制

2019-11-18 16:52:29
字體:
來源:轉載
供稿:網友

    做權限的時候,主要實現如下功能
    1、該節點可以訪問,則他的父節點也必能訪問;
  2、該節點可以訪問,則他的子節點也都能訪問;
  3、該節點不可訪問,則他的子節點也不能訪問。
    使用帶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)==0)
                 {
                    return;
                }
                else
                {
                    for(var i=0;i<parseInt(NodeArray.length);i++)
                    {
                        var cNode,nodeData;
                        cNode=NodeArray[i];
                        ////如果該節點在nodeDatas里則初始化checked = true;
                        nodeData = cNode.getAttribute("NodeData");
                        for(var j=0;j<nodeDatas.length;j++)
                        {
                            if(nodeDatas[j] == nodeData)
                            {
                                cNode.setAttribute("checked","true");
                                break;
                            }
                        }
                        //如果有子節點,則繼續遞歸
                        if(parseInt(cNode.getChildren().length)!=0)
                        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 > 0)
 {
    for (i=0;i<=tree.getChildren().length-1;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)==0)
 {
  return;
 }
 else
 {
  for(i=0;i<ChildNode.length;i++)
  {
   var cNode;
   cNode=ChildNode[i];
   cNode.setAttribute("Checked",Pchecked);
   //cNode.Checked = Pchecked;
   if(parseInt(cNode.getChildren().length)!=0)
   {
    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 >0)
    {
        var bChecked = true;
        for(var i=0;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 = 0;
 var nodes = new Array();
 nodes = node.getChildren();
 
 for (i = 0; i <= nodes.length - 1; i++)
 {
     if (nodes[i].getAttribute("Checked"))
     {
         AddChecked(nodes[i]);
     }
     if (parseInt(nodes[i].getChildren().length) != 0 )
     {
         FindCheckedFromNode(nodes[i]);
     }
 }
}
//添加選中節點
function AddChecked(node)
{
    document.all.checked.value += node.getAttribute("NodeData") + ",";
}

//-->
        </script>這種方法有個很大的問題,就是他客戶端設置的CheckBox在服務器端是不能獲取的,現在只能在Check的時候遍歷樹,并把Checked的值放在一個文本里,然后提交到服務器,然后服務器來解析1@2@這種字符
            現在我使用的是asp.net2.0,使用的是以下的方法
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(0,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=0;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=0;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(0,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(0,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的值


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久影院日本| 久久精品国产综合| 亚洲欧美日韩国产中文| 欧美做受高潮电影o| 日本久久精品视频| 亚洲国产欧美日韩精品| 国产精品羞羞答答| 成人福利在线观看| 精品视频久久久| 亚洲国产成人精品女人久久久| 亚洲最大福利视频网站| 亚洲欧美日韩第一区| 国产精品第1页| www.美女亚洲精品| 一区二区三区四区在线观看视频| 91精品久久久久久综合乱菊| 欧美人在线观看| 亚洲免费电影在线观看| 欧美激情视频网站| 欧美理论电影在线观看| 欧洲午夜精品久久久| 国产亚洲精品激情久久| 亚洲欧洲国产伦综合| 国产欧美日韩精品专区| 欧美成人sm免费视频| 精品成人在线视频| 97碰碰碰免费色视频| 亚洲国产精品视频在线观看| 日韩女在线观看| 日韩美女在线看| 美女视频久久黄| 久久亚洲精品毛片| 国产精品欧美久久久| 亚洲性av在线| 日韩免费视频在线观看| 国产精品热视频| 亲爱的老师9免费观看全集电视剧| 日韩av影视综合网| 精品人伦一区二区三区蜜桃网站| 亚洲无线码在线一区观看| 久久精品久久久久久国产 免费| 美女啪啪无遮挡免费久久网站| 国产成人一区二| 91精品久久久久| 欧美在线视频在线播放完整版免费观看| 亚洲成人精品在线| 久久久免费在线观看| 亚洲精品一区中文字幕乱码| 亚洲国产精品va在线观看黑人| 18性欧美xxxⅹ性满足| 欧美老少做受xxxx高潮| 国产欧美日韩中文字幕在线| 日本一本a高清免费不卡| 中文字幕久久久| 91沈先生在线观看| 精品日本美女福利在线观看| 国产精品一区二区三区在线播放| 欧美电影电视剧在线观看| 日韩精品免费综合视频在线播放| 欧美在线视频观看| 精品久久国产精品| 亚洲肉体裸体xxxx137| 欧美日韩综合视频网址| 欧美影院在线播放| 国产精品一区二区三区久久| 欧美精品免费在线观看| 欧美多人乱p欧美4p久久| 色偷偷综合社区| www.精品av.com| 国产做受69高潮| 黑人巨大精品欧美一区免费视频| 97精品国产97久久久久久春色| 97超碰蝌蚪网人人做人人爽| 久久久久久久影院| 日韩在线观看网址| 亚洲国产精品久久久| 91在线高清免费观看| 国产精品久久久久久久久粉嫩av| 欧美高清一级大片| 欧美成人一二三| 97国产精品人人爽人人做| 国产丝袜精品第一页| 日韩久久免费电影| 91沈先生在线观看| 69**夜色精品国产69乱| 日韩精品在线观看视频| 91精品国产综合久久香蕉922| 国产精品入口免费视频一| 亚洲最新av在线网站| 久久人人爽人人爽人人片av高清| 国产三级精品网站| 911国产网站尤物在线观看| 在线a欧美视频| 国产亚洲视频中文字幕视频| 久久亚洲精品国产亚洲老地址| 人人澡人人澡人人看欧美| 欧美裸体xxxx极品少妇软件| 亚洲人成网7777777国产| 在线观看不卡av| 日本精品一区二区三区在线播放视频| 欧美国产日韩xxxxx| 精品国产一区二区三区久久久狼| 久久人人爽人人爽人人片亚洲| 97碰在线观看| 久久影院在线观看| 久久久国产精品视频| 亚洲精品福利在线观看| 尤物九九久久国产精品的分类| 69av在线播放| 国产一区二区三区免费视频| 日韩免费在线免费观看| 日韩av手机在线看| 7777精品视频| 欧美亚州一区二区三区| 欧美在线视频免费播放| 亚洲大胆人体在线| 亚洲欧美国产精品| 国产香蕉97碰碰久久人人| 欧美精品一区在线播放| 欧美成人亚洲成人日韩成人| 在线精品视频视频中文字幕| 91精品久久久久久久久中文字幕| 成人免费视频在线观看超级碰| 日本久久亚洲电影| 国产精品69久久| 成人福利视频在线观看| 欧洲成人在线视频| 欧美日韩国产精品专区| 一本色道久久综合狠狠躁篇怎么玩| 韩国国内大量揄拍精品视频| 久久久久久国产精品三级玉女聊斋| 久久国产精品久久久久久久久久| 亚洲国产高清高潮精品美女| 亚洲精品日韩在线| 日韩成人在线电影网| 欧美另类第一页| 午夜精品久久久久久久99黑人| 日韩美女毛茸茸| 国色天香2019中文字幕在线观看| 国产欧美va欧美va香蕉在| 亚洲人av在线影院| 欧美日韩中文字幕在线| 亚洲精品国产精品乱码不99按摩| 精品久久久久久| 精品中文字幕在线2019| 久久精彩免费视频| 久久频这里精品99香蕉| 91精品国产免费久久久久久| 国产精品久久久久久久久久久久久久| 狠狠综合久久av一区二区小说| 国产91精品青草社区| 久久久久久久久久久亚洲| 日韩精品视频在线播放| 欧美激情日韩图片| 美女国内精品自产拍在线播放| 国产精品久久77777| 色噜噜久久综合伊人一本| 国产精品久久久久久网站| 欧美日韩精品二区| 亚洲第一福利网| 国产精品r级在线| 亚洲精品黄网在线观看| 亚洲成avwww人| 日韩**中文字幕毛片|