分享
 
 
 

ASP.NET无限级扩展菜单UserControl

王朝学院·作者佚名  2009-09-07
窄屏简体版  字體: |||超大  

WebMenu.ascx 文件 Code

1 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebMenu.ascx.cs" Inherits="UserControls_WebMenu" %>

2 <style type="text/css">

3 /* common styling */

4 .menu {font-family: arial, sans-serif; width:750px; position:relative; margin:0; font-size:11px; margin:50px 0;}

5 .menu ul li a, .menu ul li a:visited {display:block; text-decoration:none; color:#000;width:104px; height:20px; text-align:center; color:#fff; border:1px solid #fff; background:#4286de; line-height:20px; font-size:11px; overflow:hidden;}

6 .menu ul {padding:0; margin:0;list-style-type: none; }

7 .menu ul li {float:left; margin-right:1px; position:relative;}

8 .menu ul li ul {display: none;}

9 /* specific to non IE browsers */

10 .menu ul li:hover a {color:#fff; background:#36f;}

11 .menu ul li:hover ul {display:block; position:absolute; top:21px; left:0; width:105px;}

12 .menu ul li:hover ul li a.hide {background:#bddbff; color:#000;}

13 .menu ul li:hover ul li:hover a.hide {background:#bddbff; color:#000;}

14 .menu ul li:hover ul li ul {display: none;}

15 .menu ul li:hover ul li a {display:block; background:#bddbff; color:#000;}

16 .menu ul li:hover ul li a:hover {background:#bddbff; color:#000;}

17 .menu ul li:hover ul li:hover ul {display:block; position:absolute; left:105px; top:0;}

18 .menu ul li:hover ul li:hover ul.left {left:-105px;}

19 </style>

20 <!--[if lte IE 6]>

21 <style type="text/css">

22 .menu ul li a.hide, .menu ul li a:visited.hide {display:none;}

23 .menu ul li a:hover ul li a.hide {display:none;}

24 .menu ul li a:hover {color:#fff; background:#36f;}

25 .menu ul li a:hover ul {display:block; position:absolute; top:21px; left:0; width:105px;}

26 .menu ul li a:hover ul li a.sub {background:#bddbff; color:#000;}

27 .menu ul li a:hover ul li a {display:block; background:#bddbff; color:#000;}

28 .menu ul li a:hover ul li a ul {visibility:hidden;}

29 .menu ul li a:hover ul li a:hover {background:#bddbff; color:#000;}

30 .menu ul li a:hover ul li a:hover ul {visibility:visible; position:absolute; left:105px; top:0; color:#000;}

31 .menu ul li a:hover ul li a:hover ul.left {left:-105px;}

32 </style>

33 <![endif]-->

34 -------------

WebMenu.ascx.cs文件Code

1 using System;

2 using System.Collections.Generic;

3 using System.Web;

4 using System.Web.UI;

5 using System.Web.UI.WebControls;

6 using DAL;

7 using System.Data;

8 using Entity;

9 using System.Text;

10

11 public partial class UserControls_WebMenu : System.Web.UI.UserControl

12 {

13 IEnumerable<MenuInfo> list;

14

15 protected void Page_Load(object sender, EventArgs e)

16 {

17 list = MenuInfoAccess.GetMenuTree();

18 }

19

20 protected override void Render(HtmlTextWriter writer)

21 {

22 base.Render(writer);

23

24 writer.Write("<div class='menu'>");

25

26 if(list!=null)

27 writer.Write(ProductMenu(list));

28

29 writer.Write("</div>");

30 }

31

32 protected string ProductMenu(IEnumerable<MenuInfo> source)

33 {

34 StringBuilder sb = new StringBuilder();

35 sb.Append("<ul>");

36

37 foreach (MenuInfo item in source)

38 {

39 if (item.ChildMenuInfo.Count != 0)

40 {

41

42 sb.Append(string.Format("<li><a class='hide' href='{1}'>{0}</a>", item.TitleCN, item.FilePath));

43

44 sb.Append("<!--[if lte IE 6]>");

45 sb.Append(string.Format("<a class='sub' href='{1}' title=''>{0}&gt;",item.TitleCN,item.FilePath));

46 sb.Append("<table><tr><td>");

47 sb.Append("<![endif]-->");

48

49 sb.Append(ProductMenu(item.ChildMenuInfo));//递归生成子菜单

50

51 sb.Append("<!--[if lte IE 6]>");

52 sb.Append("</td></tr></table>");

53 sb.Append("</a>");

54 sb.Append("<![endif]-->");

55

56 sb.Append("</li>");

57 }

58 else

59 {

60 sb.Append(string.Format("<li><a href='{1}'>{0}</a></li>", item.TitleCN, item.FilePath));

61 }

62

63 }

64

65 sb.Append("</ul>");

66

67 return sb.ToString();

68

69 }

70 }

71

-----------------------

MenuInfoAccess.cs文件Code

using System;

using System.Collections.Generic;

using System.Text;

using Entity;

using System.Data;

namespace DAL

{

public class MenuInfoAccess

{

public static IEnumerable<MenuInfo> GetMenuTree()

{

string strSql = "select * from Menu order by sort";

DataTable dt = OleDbHelper.ExecuteDataTable(OleDbHelper.CONN_STRING, CommandType.Text, strSql);

return MenuInfoAccess.GetMenuNodeCollection(dt);

}

public static IEnumerable<MenuInfo> GetMenuNodeCollection(DataTable dt)

{

int type = 1;

List<MenuInfo> menus = new List<MenuInfo>();

MenuInfo menu;

for (int i = 0; i < dt.Rows.Count; i++)

{

DataRow dr = dt.Rows[i];

if ((int)dr["ParentId"] == 0)

{

menu = new MenuInfo();

menu.Level = type;

menu.Id = (int)dr["ID"];

menu.TitleCN = dr["NameCN"] == DBNull.Value ? string.Empty : (string)dr["NameCN"];

menu.TitleEN = dr["NameEN"]==DBNull.Value?string.Empty:(string)dr["NameEN"];

menu.FilePath = dr["URL"]==DBNull.Value?string.Empty:(string)dr["URL"];

menu.IsVisibily = (bool)dr["Visibily"];

menu.ChildMenuInfo = GetChileNodeCollection(menu, dt, type);//递归获得子节点结合

menus.Add(menu);

}

}

return menus;

}

//CHILE COLLECTION

public static List<MenuInfo> GetChileNodeCollection(MenuInfo xElement, DataTable C, int type)

{

int childType = type + 1;

MenuInfo item;

List<MenuInfo> list = new List<MenuInfo>();

DataRow[] collection = C.Select("ParentId=" + xElement.Id, "sort");

if (collection.Length != 0)

{

foreach (DataRow dr in collection)

{

item = new MenuInfo();

item.Level = childType;

item.Id = (int)dr["ID"];

item.TitleCN = dr["NameCN"]==DBNull.Value?string.Empty:(string)dr["NameCN"];

item.TitleEN = dr["NameEN"] == DBNull.Value ? string.Empty : (string)dr["NameEN"];

item.FilePath = dr["URL"] == DBNull.Value ? string.Empty : (string)dr["URL"];

item.IsVisibily = (bool)dr["Visibily"];

item.ChildMenuInfo = GetChileNodeCollection(item, C, childType);//递归获得子节点结合

list.Add(item);

}

}

return list;

}

}

}

-----------------------------------------------------------

MenuInfo.cs 菜单实体类Code

1 using System;

2 using System.Collections.Generic;

3 using System.Text;

4

5 namespace Entity

6 {

7 /// <summary>

8 /// 菜单信息实体类

9 /// </summary>

10 [Serializable]

11 public class MenuInfo

12 {

13 public int Id { get; set; }

14 /// <summary>

15 /// <summary>

16 /// 显示名称

17 /// </summary>

18 public string TitleCN { get; set; }

19 public string TitleEN { get; set; }

20

21 /// <summary>

22 /// 控件的完整类名或者文件相对路径

23 /// </summary>

24 public string FilePath { get; set; }

25

26 public MenuInfo Parent { get; set; }

27

28 public List<MenuInfo> ChildMenuInfo { get; set; }

29

30 /// <summary>

31 /// 节点层级,数据库可有可无这个字段,实体类需要

32 /// </summary>

33 private int level;

34 public int Level

35 {

36 get { return level; }

37 set { level = value; }

38 }

39 /// <summary>

40 /// 是否显示在菜单栏中

41 /// </summary>

42 private bool? isVisibily;

43 public bool? IsVisibily

44 {

45 get { return isVisibily; }

46 set { isVisibily = value; }

47 }

48 }

49

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有