Aquí, el control TreeView de asp.net2.0 se usa en combinación con JavaScript para implementar algunas funciones del árbol de permisos.
Supongamos que existen las siguientes tres reglas en el árbol de permisos:
1. Si el nodo es accesible, su nodo padre también debe ser accesible;
2. Si se puede acceder al nodo, también se puede acceder a sus nodos secundarios;
3. Si el nodo es inaccesible, sus nodos secundarios también lo serán.
El código es el siguiente:
//Obtiene el elemento padre del nombre de etiqueta especificado
función public_GetParentByTagName (elemento, nombre de etiqueta)
{
var padre = elemento.parentNode;
var nombreEtiquetasuperior = nombreEtiqueta.toUpperCase();
//Si este elemento no es la etiqueta deseada, continúa rastreando hacia arriba
while (padre && (parent.tagName.toUpperCase()!= UpperTagName))
{
padre = padre.parentNode? padre.parentNode: padre.parentElement;
}
padre que regresa;
}
//Establece el nodo principal del nodo Cheched: si el nodo es accesible, su nodo principal también debe ser accesible
función setParentChecked(objNode)
{
var objParentDiv = public_GetParentByTagName(objNode,"div");
if(objParentDiv==null || objParentDiv == "indefinido")
{
devolver;
}
var objID = objParentDiv.getAttribute("ID");
objID = objID.substring(0,objID.indexOf("Nodos"));
objID = objID+"Casilla de verificación";
var objParentCheckBox = document.getElementById(objID);
if(objParentCheckBox==null || objParentCheckBox == "indefinido")
{
devolver;
}
if(objParentCheckBox.tagName!="ENTRADA" && objParentCheckBox.type == "casilla de verificación")
devolver;
objParentCheckBox.checked = verdadero;
setParentChecked(objParentCheckBox);
}
//Establece el nodo secundario del nodo como sin marcar: si el nodo es inaccesible, sus nodos secundarios también serán inaccesibles.
función setChildUnChecked(divID)
{
var objchild = divID.niños;
var recuento = objchild.length;
para(var i=0;i<objchild.length;i++)
{
var tempObj = objchild[i];
if(tempObj.tagName=="ENTRADA" && tempObj.type == "casilla de verificación")
{
tempObj.checked = falso;
}
setChildUnChecked(tempObj);
}
}
//Establece el nodo secundario del nodo marcado: si se puede acceder al nodo, también se puede acceder a sus nodos secundarios
función setChildChecked(divID)
{
var objchild = divID.niños;
var recuento = objchild.length;
para(var i=0;i<objchild.length;i++)
{
var tempObj = objchild[i];
if(tempObj.tagName=="ENTRADA" && tempObj.type == "casilla de verificación")
{
tempObj.checked = verdadero;
}
setChildChecked(tempObj);
}
}
//evento desencadenante
función VerificarEvento()
{
var objNode = event.srcElement;
if(objNode.tagName!="ENTRADA" || objNode.type!="casilla de verificación")
retorno;
si (objNode.checked==verdadero)
{
setParentChecked(objNode);
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodos");
if(objParentDiv==null || objParentDiv == "indefinido")
{
devolver;
}
setChildChecked(objParentDiv);
}
demás
{
var objID = objNode.getAttribute("ID");
var objID = objID.substring(0,objID.indexOf("CheckBox"));
var objParentDiv = document.getElementById(objID+"Nodos");
if(objParentDiv==null || objParentDiv == "indefinido")
{
devolver;
}
setChildUnChecked(objParentDiv);
}
}
Luego vincule TreeView al evento js en el evento page_load:
this.TreeView1.Attributes.Add("onclick", "CheckEvent()");