国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

asp.net 2.0 權(quán)限樹的控制

2019-11-18 16:52:29
字體:
供稿:網(wǎng)友

    做權(quán)限的時候,主要實現(xiàn)如下功能
    1、該節(jié)點可以訪問,則他的父節(jié)點也必能訪問;
  2、該節(jié)點可以訪問,則他的子節(jié)點也都能訪問;
  3、該節(jié)點不可訪問,則他的子節(jié)點也不能訪問。
    使用帶CheckBox的數(shù)型結(jié)構(gòu)能得到很好的用戶體驗,可是編程的難度也是有點增加,如果全部有服務(wù)端來完成,那點下刷下,肯定不行,只能使用javascript,Javascript調(diào)試的時候郁悶的很,一個字類,還有郁悶的遞歸,麻煩
我以前是使用以下該方法
<script language="javascript">
<!--
        //初始化節(jié)點
        initchecknode(document.all("tvItemClientID").value,document.all("checked").value)
       
            //初始化選中節(jié)點
            function initchecknode(tree,tvvalue)
            {
                //獲得需要初始化選擇狀態(tài)的節(jié)點的字符串.
                var selectedNodes = tvvalue;
                var arrayNodes = new Array();
                arrayNodes = selectedNodes.split(",");
                var AllRootNode=new Array();
                AllRootNode=document.getElementById(tree).getChildren();
                //初始化選擇的節(jié)點
                findAndCheckedNodes(AllRootNode,arrayNodes);
            }

            //根據(jù)已選擇的節(jié)點的字符串初始化選擇的節(jié)點
            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];
                        ////如果該節(jié)點在nodeDatas里則初始化checked = true;
                        nodeData = cNode.getAttribute("NodeData");
                        for(var j=0;j<nodeDatas.length;j++)
                        {
                            if(nodeDatas[j] == nodeData)
                            {
                                cNode.setAttribute("checked","true");
                                break;
                            }
                        }
                        //如果有子節(jié)點,則繼續(xù)遞歸
                        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]);
    }
 }
}
//設(shè)置子節(jié)點選中

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);
   }
  }
 }
}

//設(shè)置子節(jié)點選中/取消;
//同時需要設(shè)置父節(jié)點的狀態(tài)(如果是取消選中的話,僅僅設(shè)置本節(jié)點及其所有字接點,不涉及父接點)
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
//只查第一級節(jié)點.
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
        {
            //所有父結(jié)點選擇
            setParent(parentNode,!Pc)
        }
    }
    else
    {
        parentNode.setAttribute("checked",Pc);
    }
}

//獲取所有節(jié)點狀態(tài)
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]);
     }
 }
}
//添加選中節(jié)點
function AddChecked(node)
{
    document.all.checked.value += node.getAttribute("NodeData") + ",";
}

//-->
        </script>這種方法有個很大的問題,就是他客戶端設(shè)置的CheckBox在服務(wù)器端是不能獲取的,現(xiàn)在只能在Check的時候遍歷樹,并把Checked的值放在一個文本里,然后提交到服務(wù)器,然后服務(wù)器來解析1@2@這種字符
            現(xiàn)在我使用的是asp.net2.0,使用的是以下的方法
function public_GetParentByTagName(element, tagName)
{
    var parent = element.parentNode;
    var upperTagName = tagName.toUpperCase();
    //如果這個元素還不是想要的tag就繼續(xù)上溯
    while (parent && (parent.tagName.toUpperCase() != upperTagName))
    {
        parent = parent.parentNode ? parent.parentNode : parent.parentElement;
    }
    return parent;
}

//設(shè)置節(jié)點的父節(jié)點Cheched——該節(jié)點可訪問,則他的父節(jié)點也必能訪問
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);
}

//設(shè)置節(jié)點的子節(jié)點uncheched——該節(jié)點不可訪問,則他的子節(jié)點也不能訪問
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);
    }
}

//設(shè)置節(jié)點的子節(jié)點cheched——該節(jié)點可以訪問,則他的子節(jié)點也都能訪問
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);
    }
}

//觸發(fā)事件
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);
    }
}這種方法最大的好處就是服務(wù)端能得javascript設(shè)置的Checked的值,不用沒點下就全部把樹遍利下,直接在服務(wù)端遍利一次就行了
    //遍歷子節(jié)點
    public void GetChildNode(TreeNode Node)
    {
        foreach (TreeNode node in Node.ChildNodes)
        {
            if (node.Checked)
            {
                StrChecked += node.Value+"@";
            }
            GetChildNode(node);
        }
    }
}我照樣能得到它的Check的值


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁阳县| 新津县| 沿河| 清丰县| 左云县| 台安县| 体育| 芒康县| 龙口市| 兴山县| 乌鲁木齐县| 正安县| 潞城市| 高青县| 健康| 清新县| 天津市| 昌图县| 麻阳| 朔州市| 孟津县| 黄山市| 遂平县| 阳高县| 日喀则市| 宿迁市| 晋中市| 灵武市| 天峨县| 永胜县| 图片| 通山县| 历史| 淮南市| 台东县| 尼木县| 台东县| 基隆市| 景宁| 朝阳区| 洱源县|