文档介绍:权限管理
解决方案
中常用来实现动态菜单的方法
用TreeView
实现动态菜单
使用TreeView控件动态生成菜单(1)
我们以两层菜单为例来讲解动态菜单
属性名称
说明
NodeId
系统菜单的ID
DisplayName
系统菜单显示的文本
NodeURL
系统菜单的连接地址
ParentNodeId
父菜单ID,ID为“0”,表示第一级菜单
DisplayOrder
在系统中显示出来的顺序
MyOffice中SysFun
表数据信息
SysFun表字段信息
实现后的菜单效果
使用TreeView控件动态生成菜单(2)
动态生成第一级菜单
展示所有的ParentNodeId为“0”的菜单
使用TreeView控件动态生成菜单(3)
protected void Page_Load(object sender, EventArgs e)
{
if (!) {DisplayUserMenu();}
}
protected void DisplayUserMenu()
{
();
IList<SysFun> parentSysFun = ();
foreach (SysFun sfParent in parentSysFun)
{
string nodeId = ();
string displayName = ;
TreeNode fatherNode = (displayName, nodeId,
“”, “Images/”);
(fatherNode);
}
}
生成第一级菜单后台关键代码
得到系统菜单表中所有的第一级菜单
得到第一层节点的ID
得到第一层节点的显示名
根据节点信息,
创建第一层节点
将节点添加到TreeView中
public static IList<SysFun> GetAllParentNodeInfo()
{
return ();
}
对应的业务处理层关键方法
public static IList<SysFun> GetAllParentNodeInfo()
{
string sql = "select * from sysfun where ParentNodeId = '0'";
return GetSysFunBySql(sql);
}
对应的数据访问层关键方法
查看生成第一级菜单关键后台代码
使用TreeView控件动态生成菜单(4)
,只能看到第一级菜单
如何生成父菜单对应的子菜单呢?
protected void Page_Load(object sender, EventArgs e)
{
if (!) {DisplayUserMenu();}
}
protected void DisplayUserMenu()
{
();
IList<SysFun> parentSysFun = ();
foreach (SysFun sfParent in parentSysFun)
{
string nodeId = ();
string displayName = ;
TreeNode fatherNode = (displayName, nodeId,
“”, “Images/”);
CreateChildTree(nodeId,fatherNode); (fatherNode);
}
}
在此处添加创建子菜单方法
使用TreeView控件动态生成菜单(5)
private void CreateChildTree(string nodeId, TreeNode fatherNode)