C# 递归读取XML菜单数据
2020-12-13 16:30
标签:style blog http io color ar os 使用 sp 在博客园注册了有4年了,很遗憾至今仍未发表过博客,趁周末有空发表第一篇博客。小生不才,在此献丑了! 最近在研究一些关于C#的一些技术,纵观之前的开发项目的经验,做系统时显示系统菜单的功能总是喜欢把数据写在数据库表,然后直接读取加载到菜单树上显示。 现在想把菜单数据都放在XML里,然后递归读取XML。 由于项目使用WCF,实体类使用了两个,一个是业务逻辑层中的实体,一个是调用业务逻辑层递归方法后进行数据实体的转换,XML读取方法写在业务逻辑层中。 思路:1.先读取XML里所有的菜单 2.根据用户的权限显示所属用户的菜单加载到页面上 XML数据如下: 菜单的业务逻辑实体类: 用户权限菜单方法: 系统菜单类: 后台页面加载Load代码: 效果图: 这里补充一下:菜单中如果在模块Module里设置属性Display="false",则模块不显示出来,可是模块下的菜单可显示出来。 itemType=“Folder”显示类型是目录,itemType=“Menu”显示类型是菜单 C# 递归读取XML菜单数据 标签:style blog http io color ar os 使用 sp 原文地址:http://www.cnblogs.com/scong/p/4084110.html 1 "1.0" encoding="utf-8"?>
2
1 public class MenuTreeSearchModel
2 {
3 //菜单ID
4 public string ItemCode { get; set; }
5
6 //菜单名称
7 public string ItemName { get; set; }
8
9 //菜单显示类型
10 public string ItemType { get; set; }
11
12 //排序
13 public int ItemOrder { get; set; }
14
15 //是否显示
16 public bool Visible { get; set; }
17
18 //菜单链接
19 public string ItemUrl { get; set; }
20
21 //上级ID
22 public string ParentItem { get; set; }
23
24 //系统平台ID
25 public string ApplicationCode { get; set; }
26
27 //系统平台名称
28 public string ApplicationName { get; set; }
29
30 //模块ID
31 public string ModuleCode { get; set; }
32
33 //模块名称
34 public string ModuleName { get; set; }
35 }
递归方法,读取每个模块和模块下的菜单: 1 protected void GetChildMenuList(XElement root, List
从XML文档读取: 1 ///
以下是在调用服务契约方法时进行的实体类: 1 public class PublicUserMenuTreeData
2 {
3 //菜单ID
4 public string ItemCode { get; set; }
5
6 //菜单名称
7 public string ItemName { get; set; }
8
9 //菜单显示类型
10 public string ItemType { get; set; }
11
12 //排序
13 public int ItemOrder { get; set; }
14
15 //是否显示
16 public bool Visible { get; set; }
17
18 //菜单链接
19 public string ItemUrl { get; set; }
20
21 //上级ID
22 public string ParentItem { get; set; }
23
24 //系统平台ID
25 public string ApplicationCode { get; set; }
26
27 //系统平台名称
28 public string ApplicationName { get; set; }
29
30 //模块ID
31 public string ModuleCode { get; set; }
32
33 //模块名称
34 public string ModuleName { get; set; }
35 //当前菜单下的菜单集合
36 public List
实体转换方法: 1 public PublicUserMenuTreeData TransferUserMenuTreeToPublicUserMenu(MenuTreeData userMenuTreeData)
2 {
3 PublicUserMenuTreeData pubUserMenuTreeData = new PublicUserMenuTreeData();
4 pubUserMenuTreeData.ItemCode = userMenuTreeData.ItemCode;
5 pubUserMenuTreeData.ItemName = userMenuTreeData.ItemName;
6 pubUserMenuTreeData.ItemType = userMenuTreeData.ItemType;
7 pubUserMenuTreeData.ItemOrder = userMenuTreeData.ItemOrder;
8 pubUserMenuTreeData.Visible = userMenuTreeData.Visible;
9 pubUserMenuTreeData.ItemUrl = userMenuTreeData.ItemUrl;
10 pubUserMenuTreeData.ParentItem = userMenuTreeData.ParentItem;
11 pubUserMenuTreeData.ApplicationCode = userMenuTreeData.ApplicationCode;
12 pubUserMenuTreeData.ApplicationName = userMenuTreeData.ApplicationName;
13 pubUserMenuTreeData.ModuleCode = userMenuTreeData.ModuleCode;
14 pubUserMenuTreeData.ModuleName = userMenuTreeData.ModuleName;
15 return pubUserMenuTreeData;
16 }
1 ///
1 ///
1 string menuData = string.Empty;
2
3 var treeList= GetMenuTreeList();
4 if (treeList!= null)
5 {
6 List
页面加载脚本,这里使用Jquery: 1 var obj = menuData;
2 GetMenuInfo(obj);
3 function GetMenuInfo(obj) {
4 var str = "";
5
6 var objInfo = "";
7 if (obj) {
8 objInfo = obj.split("|");
9 if (objInfo[0] != "") {
10 var PublicUserMenuTreeData = JSON.parse(objInfo[0]);
11 for (var i = 0; i ) {
12 str += ("");
13 var tempmenu= PublicUserMenuTreeData[i];
14 if (tempmenu.ItemType && tempmenu.ItemType == "Menu") {
15 str += ("" + tempmenu.ItemCode + "()‘ id=‘" + tempmenu.ItemCode + "‘>" + tempmenu.ItemName + "");
16 str += ("" + tempmenu.ItemCode);
17 str += ("() { tabframe1.newTab({ title: ‘" + tempmenu.ItemName + "‘,");
18 if (tempmenu.ItemUrl.indexOf(‘?‘) != -1) {
19 str += ("src: ‘" + tempmenu.ItemUrl + "&applicationid=" + tempmenu.ApplicationCode + "&moduleid=" + tempmenu.ModuleCode + "‘,");
20 } else {
21 str += ("src: ‘" + tempmenu.ItemUrl + "?applicationid=" + tempmenu.ApplicationCode + "&moduleid=" + tempmenu.ModuleCode + "‘,");
22 }
23
24 str += (" id: ‘oa-system-" + tempmenu.ItemCode + "‘,");
25 str += (" closable: true }); jQuery(‘#mainmenulist‘).hide(); return false; }");
26 } else {
27 str += ("" + PublicUserMenuTreeData[i].ItemCode + "‘>" + PublicUserMenuTreeData[i].ItemName + "");
28 }
29
30 if (PublicUserMenuTreeData[i].UserMenuTreeDatas) {
31 str += GetRecurrenceData(PublicUserMenuTreeData[i].UserMenuTreeDatas);
32 }
33
34 str += (" ");
35 }
36
37
38 }
39 }
40
41 function GetRecurrenceData(listPublicUserMenuTreeData) {
42 var str = "";
43 if (listPublicUserMenuTreeData && listPublicUserMenuTreeData.length>0) {
44 str += ("
");
45 for (var j = 0; j ) {
46 str += ("");
47 if (listPublicUserMenuTreeData[j].ItemType && listPublicUserMenuTreeData[j].ItemType == "Menu") {
48 str += ("" + listPublicUserMenuTreeData[j].ItemCode + "()‘ id=‘" + listPublicUserMenuTreeData[j].ItemCode + "‘>" + listPublicUserMenuTreeData[j].ItemName + "");
49 str += ("" + listPublicUserMenuTreeData[j].ItemCode);
50 str += ("() { tabframe1.newTab({ title: ‘" + listPublicUserMenuTreeData[j].ItemName + "‘,");
51 if (listPublicUserMenuTreeData[j].ItemUrl.indexOf(‘?‘) != -1) {
52 str += ("src: ‘" + listPublicUserMenuTreeData[j].ItemUrl + "&applicationid=" + listPublicUserMenuTreeData[j].ApplicationCode + "&moduleid=" + listPublicUserMenuTreeData[j].ModuleCode + "‘,");
53 } else {
54 str += ("src: ‘" + listPublicUserMenuTreeData[j].ItemUrl + "?applicationid=" + listPublicUserMenuTreeData[j].ApplicationCode + "&moduleid=" + listPublicUserMenuTreeData[j].ModuleCode + "‘,");
55 }
56
57 str += (" id: ‘oa-system-" + listPublicUserMenuTreeData[j].ItemCode + "‘,");
58 str += (" closable: true }); jQuery(‘#mainmenulist‘).hide(); return false; }");
59 } else {
60 str += ("" + listPublicUserMenuTreeData[j].ItemCode + "‘>" + listPublicUserMenuTreeData[j].ItemName + "");
61 }
62
63
64 var ListMenuDatas = listPublicUserMenuTreeData[j].UserMenuTreeDatas;
65 str += GetRecurrenceData(ListMenuDatas);
66
67 str += ("");
68 }
69 str += (" ");
70 }
71 return str;
72 }