3、编写后台代码,主要思路是使用递归来实现菜单的层级关系
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; //new using using System.Data; using System.Data.Sql; using System.Text;
public partial class LeftMenu : System.Web.UI.UserControl { protected string _menu = string.Empty;
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindMenu(); } }
private void BindMenu() { StringBuilder sb = new StringBuilder(); OledbHelper helper = new OledbHelper(); DataSet ds = helper.GetDs("select * from [Menu]"); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0] != null && ds.Tables[0].Rows.Count > 0) { DataRow[] rows = ds.Tables[0].Select("ParentID=0"); foreach (DataRow dr in rows) { string id = dr["ID"].ToString(); string name = dr["Name"].ToString(); sb.Append("<li><a href=\"http://www.google.com\">" + name + "</a>\r\n");//href可以写需要的链接地址 sb.Append(GetSubMenu(id, ds.Tables[0])); sb.Append("</li>\r\n"); } _menu = sb.ToString(); } }
private string GetSubMenu(string pid, DataTable dt) { StringBuilder sb = new StringBuilder(); DataRow[] rows = dt.Select("ParentID=" + pid); sb.Append("<ul>\r\n"); foreach (DataRow dr in rows) { string id = dr["ID"].ToString(); string name = dr["Name"].ToString(); sb.Append("<li><a href=\"http://www.google.com\">" + name + "</a>\r\n"); sb.Append(GetSubMenu(id, dt)); //递归 sb.Append("</li>\r\n"); } sb.Append("</ul>\r\n"); return sb.ToString(); } } |
4、创建aspx页面Menu 将用户控件拖到页面中,运行就可以看到效果。
注:该例子需要有一个静态的css菜单作为模板,网络上很多的css菜单都可以来套用,当然css很强的朋友自己来设计会更好。