在 ASP.NET 运行时创建多级菜单?

问题描述 投票:0回答:1

我的数据库结构如下

表菜单>>

菜单 ID、菜单名称、链接路径、菜单描述、菜单位置、IsParent、子 ID

我正在母版页的运行时获取项目,并希望使用我所需的 CSS 类正确显示项目,但仅显示顶级(所有项目)。现在我想将子菜单项也显示为下拉菜单。请建议您使用 ASP.NET 和 C# 实现这一点的方法。

-约翰·巴特

asp.net sql c#-4.0 drop-down-menu
1个回答
0
投票

我在这里所做的是创建了两个方法并使用了菜单控件。

protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         LoadMenu();
     }
 }   
 
 void LoadMenu()
 {
     DataTable dt = this.GetData(0);
     PopulateMenu(dt, 0, null);    
 }

 private DataTable GetData(int ParentMenuItem)
 {
     string query = "SELECT MenuID, MenuItemID,ParentMenuItem,ItemName,MenuURL,MenuRemarks,ItemPosition FROM [MenuItems] WHERE ParentMenuItem = @ParentMenuItem AND Visibility=1 ORDER BY ItemPosition ASC";
     SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConToCMS"].ConnectionString);
     SqlDataAdapter adp = new SqlDataAdapter(query, con);
     DataTable dt = new DataTable();
     adp.SelectCommand.CommandType = CommandType.Text;
     adp.SelectCommand.Parameters.AddWithValue("@ParentMenuItem", ParentMenuItem);
     try
     {
         adp.Fill(dt);
     }
     catch (Exception ex)
     {
         throw ex;
     }
     return dt;
 }


 private void PopulateMenu(DataTable dt, int ParentMenuItem, MenuItem parentMenuItem)
 {
     string currentPage = Path.GetFileName(Request.Url.AbsolutePath);
     foreach (DataRow row in dt.Rows)
     {
         MenuItem menuItem = new MenuItem
         {
             Value = row["MenuItemId"].ToString(),
             Text = row["ItemName"].ToString(),
             NavigateUrl = row["MenuURL"].ToString(),                
             Selected = row["MenuURL"].ToString().EndsWith(currentPage, StringComparison.CurrentCultureIgnoreCase)
         };

         if (ParentMenuItem == 0)
         {
             MainMenu.Items.Add(menuItem);
             DataTable dtChild = this.GetData(int.Parse(menuItem.Value));
             PopulateMenu(dtChild, int.Parse(menuItem.Value), menuItem);
         }
         else
         {
             parentMenuItem.ChildItems.Add(menuItem);
         }
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.