Hier wird das TreeView-Steuerelement von asp.net2.0 in Kombination mit JavaScript verwendet, um einige Funktionen des Berechtigungsbaums zu implementieren.
Gehen Sie davon aus, dass der Berechtigungsbaum die folgenden drei Regeln enthält:
1. Wenn der Knoten zugänglich ist, muss auch sein übergeordneter Knoten zugänglich sein;
2. Wenn auf den Knoten zugegriffen werden kann, kann auch auf seine untergeordneten Knoten zugegriffen werden.
3. Wenn auf den Knoten nicht zugegriffen werden kann, sind auch seine untergeordneten Knoten nicht zugreifbar.
Der Code lautet wie folgt:
//Das übergeordnete Element des angegebenen tagName abrufen
Funktion public_GetParentByTagName(element, tagName)
{
var parent = element.parentNode;
var UpperTagName = tagName.toUpperCase();
//Wenn dieses Element nicht das gewünschte Tag ist, fahren Sie mit der Verfolgung fort
while (parent && (parent.tagName.toUpperCase() !=upperTagName))
{
parent = parent.parentNode ? parent.parentNode : parent.parentElement;
}
Elternteil zurückgeben;
}
//Legen Sie den übergeordneten Knoten des Knotens fest. Cheched – Wenn auf den Knoten zugegriffen werden kann, muss auch auf seinen übergeordneten Knoten zugegriffen werden
Funktion setParentChecked(objNode)
{
var objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "undefiniert")
{
zurückkehren;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Nodes"));
objID = objID+"CheckBox";
var objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "undefiniert")
{
zurückkehren;
}
if(objParentCheckBox.tagName!="INPUT" && objParentCheckBox.type == "checkbox")
zurückkehren;
objParentCheckBox.checked = true;
setParentChecked(objParentCheckBox);
}
// Setzen Sie den untergeordneten Knoten des Knotens auf deaktiviert – wenn auf den Knoten nicht zugegriffen werden kann, sind auch seine untergeordneten Knoten nicht zugänglich.
Funktion 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);
}
}
//Legen Sie den untergeordneten Knoten des Knotens fest – wenn auf den Knoten zugegriffen werden kann, kann auch auf seine untergeordneten Knoten zugegriffen werden
Funktion 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);
}
}
//Ereignis auslösen
Funktion 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 == "undefiniert")
{
zurückkehren;
}
setChildChecked(objParentDiv);
}
anders
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodes");
if(objParentDiv==null || objParentDiv == "undefiniert")
{
zurückkehren;
}
setChildUnChecked(objParentDiv);
}
}
Binden Sie dann die TreeView an das js-Ereignis im page_load-Ereignis:
this.TreeView1.Attributes.Add("onclick", "CheckEvent()");