ASP教程 PHP教程 JSP教程 CGI教程 XML教程
  • ASP.NET教程
  • JAVA教程
    当前位置:教程 > 程序设计 > ASP.NET教程 > 正文

    asp.net 2.0 权限树的控制

    编辑:教程网 来源:网络 时间:2011年11月07日 15:50

    做权限的时候,主要实现如下功能
    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();

  • 原文来自 教程网 转载请注明:http://www.websmill.com/chengxu/aspnet/31776.html

  • 上一篇:关于VS.NET beta1安装问题
  • 下一篇:深入讲解 ASP+ 验证(三)