asp.net 用XML生成放便扩展的自定义树

时间:2022-02-18 13:33:42
数据源为XML,因此放便扩展。 
废话不多说,直接上代码(因一些原因,把部分数据修改或精简了)。 
XML代码: 
复制代码代码如下:

<?xml version="1.0" encoding="utf-8" ?> 
<MenuData> 
<Module Id="Business" Permissions="49,53,58,59,65,99,100,70,69" Name="业务管理" IsExpand="true"> 
<Menu Id="Orders" Permissions="49,53,58" Name="我的订单" IsExpand="true"> 
<Item Permissions="49" IsOnlyVip="true" Name="预订单" Url="Business/ProList.aspx" /> 程序代码: 
复制代码代码如下:

using System.Text; 
using System.Collections; 
using System.Xml; 
using System.Web; 
using System; 
/// <summary> 
/// CreateTree 的摘要说明 
/// </summary> 
public class MenuTree 

int index = 0;//菜单栏目ID索引 
private ArrayList havePermission = new ArrayList(); 
private bool isVip = false; 
/// <summary> 
/// 登录用户所拥有的权限 
/// </summary> 
private ArrayList HavePermissions 

get { return havePermission; } 
set { havePermission = value; } 

/// <summary> 
/// 登录用户是否是VIP 
/// </summary> 
private bool IsVip 

get { return isVip; } 
set { isVip = value; } 

/// <summary> 
/// 登录用户所拥有的权限 是否为VIP用户 
/// </summary> 
/// <param name="havePermission"></param> 
/// <param name="isVip"></param> 
public MenuTree(ArrayList havePermission, bool isVip) 

this.HavePermissions = havePermission; 
this.IsVip = isVip; 

/// <summary> 
/// 绑定树 
/// </summary> 
public string BindDataToTree() 

System.Xml.XmlDocument document = new System.Xml.XmlDataDocument(); 
document.Load(HttpContext.Current.Server.MapPath("MenuData.xml")); 
return CreateTreeHtml(document.DocumentElement, 0); 

/// <summary> 
/// 创建栏目树 
/// </summary> 
/// <param name="document">xml节点</param> 
/// <param name="deep">树深度</param> 
private string CreateTreeHtml(System.Xml.XmlNode document, int deep) 

string nodeType = "Menu";//节点的类型,来生成子节点的CSS类型 
StringBuilder treeHtml = new StringBuilder(); 
foreach (System.Xml.XmlNode node in document.ChildNodes) 

string menuId = string.Empty; 
string treeNodeHtml = string.Empty; 
string nodeName = node.Name; 
string showName = GetAttributesValue(node.Attributes["Name"]);//显示栏目名 
string nodeId = GetAttributesValue(node.Attributes["Id"]);//栏目ID 
bool isExpand = GetAttributesValue(node.Attributes["IsExpand"]).ToLower().Trim() == "true" ? true : false;//是否展开 
string permissions = GetAttributesValue(node.Attributes["Permissions"]);//权限字串 
bool isOnlyVip = GetAttributesValue(node.Attributes["IsOnlyVip"]).ToLower().Trim() == "true" ? true : false;//是否只允许VIP访问 
bool isUnVip = GetAttributesValue(node.Attributes["IsUnVip"]).ToLower().Trim() == "true" ? true : false;//是否只准非VIP访问 
string eventScript = GetAttributesValue(node.Attributes["EventScript"]);//事件脚本 
int chlidNodesCount = node.ChildNodes.Count;//子节点数 
bool isPermissions = GetIsPermissions(permissions);//是否有权限 
if (!isPermissions) 

continue; //如果没有权限,不生成此节点 

if (nodeName == "Module") 

if (isUnVip && IsVip) 

continue;//如果为VIP会员 设为不允许访问子栏目 

menuId = GetMenuId(nodeId); 
treeHtml.AppendFormat("<div class='Module' id='Menu{0}' onclick='DoNodes(this);{1}' onselectstart='return false;'>", menuId, eventScript); 
treeHtml.Append(" <img src='/images/sideMenuIcon.gif' /> 相关JS代码: 
复制代码代码如下:

function DoNodes(obj,type) 

var divId=obj.id+'Nodes'; 
var qdivObj=$("#"+divId); 
if(qdivObj.is(":hidden")) 

qdivObj.show(); 
if(type=='menu') 

$(obj).children("img").attr("src","Images/open-menu.gif"); 

else 

qdivObj.siblings(".Menus:visible").hide(); 


else 

qdivObj.hide(); 
if(type=='menu') 

$(obj).children("img").attr("src","Images/close-menu.gif"); 



function DoAClick(id) 

$("#"+id).click(); 

function AlertVip() 

alert("非常抱歉,此模块只对VIP会员开放!");return false; 

最后效果 
asp.net 用XML生成放便扩展的自定义树
此代码我觉得易放便扩展,只要稍改动一下代码就能使用在自己的项目中。

延伸 · 阅读

精彩推荐