难道是BUG?为什么ASP.NET2.0下的TreeView中的checkbox无法PostBack和自动关联!

最近作项目正在使用TreeView,发现了ASP.NET2.0下的TreeView中的checkbox无法PostBack和自动关联,难道又是微软的一个难道是BUG?不过这个BUG也有点太大了阿,查遍了网上的资料,发现有人用JS解决了这个问题,经过调试,已经解决了这个问题,但总感觉不是很完美,呵呵。
 假设有如下三条规则:
  1、该节点可以访问,则它的父节点也必能访问;
  2、该节点可以访问,则它的子节点也都能访问;
  3、该节点不可访问,则它的子节点也不能访问。

1     protected void Page_Load(object sender, EventArgs e)
2     {
3         this.TreeView1.Attributes.Add("onclick""CheckEvent()"); 
4     }


  1 //获取元素指定tagName的父元素
  2 function public_GetParentByTagName(element, tagName) 
  3 {
  4     var parent = element.parentNode;
  5     var upperTagName = tagName.toUpperCase();
  6     //如果这个元素还不是想要的tag就继续上溯
  7     while (parent && (parent.tagName.toUpperCase() != upperTagName)) 
  8     {
  9         parent = parent.parentNode ? parent.parentNode : parent.parentElement;
 10     }
 11     return parent;
 12 }
 13 
 14 //设置节点的父节点Cheched——该节点可访问,则它的父节点也必能访问
 15 function setParentChecked(objNode)
 16 
 17     var objParentDiv = public_GetParentByTagName(objNode,"div");
 18     if(objParentDiv==null || objParentDiv == "undefined")
 19     {
 20         return;
 21     }
 22     var objID = objParentDiv.getAttribute("ID");
 23     objID = objID.substring(0,objID.indexOf("Nodes"));
 24     objID = objID+"CheckBox";
 25     var objParentCheckBox = document.getElementById(objID);
 26     if(objParentCheckBox==null || objParentCheckBox == "undefined")
 27     {
 28         return;
 29     } 
 30     if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox")
 31     return
 32     objParentCheckBox.checked = true;
 33     setParentChecked(objParentCheckBox);
 34 }
 35 
 36 //设置节点的子节点uncheched——该节点不可访问,则它的子节点也不能访问
 37 function setChildUnChecked(divID)
 38 
 39     var objchild = divID.children;
 40     var count = objchild.length; 
 41     for(var i=0;i<objchild.length;i++)
 42     {
 43         var tempObj = objchild[i];
 44         if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")
 45         {
 46             tempObj.checked = false;
 47         }
 48         setChildUnChecked(tempObj); 
 49     }
 50 }
 51 
 52 //设置节点的子节点cheched——该节点可以访问,则它的子节点也都能访问
 53 function setChildChecked(divID)
 54 
 55     var objchild = divID.children;
 56     var count = objchild.length; 
 57     for(var i=0;i<objchild.length;i++)
 58     {
 59         var tempObj = objchild[i];
 60         if(tempObj.tagName=="INPUT" && tempObj.type == "checkbox")
 61         {
 62             tempObj.checked = true;
 63         }
 64         setChildChecked(tempObj); 
 65     }
 66 }
 67 
 68 //触发事件
 69 function CheckEvent()
 70 {
 71 
 72     var objNode = event.srcElement; 
 73 
 74     if(objNode.tagName!="INPUT" || objNode.type!="checkbox")
 75     return;
 76 
 77     if(objNode.checked==true)
 78     {
 79         setParentChecked(objNode);
 80         var objID = objNode.getAttribute("ID");
 81         var objID = objID.substring(0,objID.indexOf("CheckBox")); 
 82         var objParentDiv = document.getElementById(objID+"Nodes");
 83         if(objParentDiv==null || objParentDiv == "undefined")
 84         {
 85             return;
 86         } 
 87         setChildChecked(objParentDiv);
 88     }
 89     else
 90     {
 91         var objID = objNode.getAttribute("ID");
 92         var objID = objID.substring(0,objID.indexOf("CheckBox")); 
 93         var objParentDiv = document.getElementById(objID+"Nodes");
 94         if(objParentDiv==null || objParentDiv == "undefined")
 95         {
 96             return;
 97         } 
 98         setChildUnChecked(objParentDiv);
 99     }
100 }
101 

posted on 2006-07-20 23:19  xh3  阅读(1073)  评论(6编辑  收藏  举报

导航