求助,关于asp.net menu控件的三级菜单问题

深海线 2010-10-29 06:18:46
正在学习nopcommerce 的源码,想加一个导航菜单,用asp.net 自带的MENU来做,参照了nopcomerce论坛的方法,但是
一直无法实现三级菜单。只能显示二级菜单。


using System;
using System.Collections;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using NopSolutions.NopCommerce.BusinessLogic.Categories;
using NopSolutions.NopCommerce.BusinessLogic.Products;
using NopSolutions.NopCommerce.BusinessLogic.SEO;
using NopSolutions.NopCommerce.Common.Utils;
using NopSolutions.NopCommerce.Common.Utils;
using NopSolutions.NopCommerce.BusinessLogic.Media;
using NopSolutions.NopCommerce.BusinessLogic.Configuration.Settings;

namespace NopSolutions.NopCommerce.Web.Modules
{
// public partial class NavMenu : System.Web.UI.UserControl //BaseNopUserControl
public partial class NavMenu : BaseNopUserControl
{
#region Handlers
protected void Page_Load(object sender, EventArgs e)
{
//------------
}
#endregion

#region Overrides
protected override void CreateChildControls()
{

if (!this.ChildControlsCreated)
{
CreateMenu();
base.CreateChildControls();
ChildControlsCreated = true;
}
}

#endregion

#region Utilities
//Menu NavigationMenu = null;
protected void CreateMenu()
{

MenuItem me = new MenuItem();

NavMenu2.Orientation = Orientation.Vertical;

List<Category> breadCrumb = null;
Category currentCategory = CategoryManager.GetAllCategories()[0];
if (currentCategory != null)
breadCrumb = CategoryManager.GetBreadCrumb(currentCategory.CategoryId);

else
breadCrumb = new List<Category>();

CreateChildMenu(breadCrumb, 0, currentCategory, 0);//创建父菜单



}

MenuItem MainMenuItem = null;
MenuItem SubMenuItem = null;
MenuItem threeMenuItem = null;

protected void CreateChildMenu(List<Category> breadCrumb, int rootCategoryID, Category currentCategory, int level)
{
int padding = level++;
string xie = padding.ToString();

foreach (Category category in CategoryManager.GetAllCategoriesByParentCategoryId(rootCategoryID))
{
string URL = SEOHelper.GetCategoryUrl(category.CategoryId);
string CategoryName = Server.HtmlEncode(category.Name);
string ImgURL = PictureManager.GetPictureUrl(category.PictureId, SettingManager.GetSettingValueInteger
("Media.Category.ThumbnailImageSize", 15), false);
if (padding > 0)
{
//SubMenu
SubMenuItem = CreateMenuItem(CategoryName, URL, CategoryName);
// Add the submenu items to the ChildItems
// 收集根菜单项。
MainMenuItem.ChildItems.Add(SubMenuItem);
// SecondNode.ChildNodes.Add(SubMenuItem);

}
else
{ //MainMenu
MainMenuItem = CreateMenuItem(category.Name, URL, CategoryName, ImgURL);
NavMenu2.Items.Add(MainMenuItem);
//NavigationMenu.
// TV.Nodes.Add(FirestNode);
}

for (int i = 0; i <= breadCrumb.Count-1; i++)


CreateChildMenu(breadCrumb, category.CategoryId, currentCategory, level);

string ll = category.CategoryId.ToString();

Label2.Text =ll;


}
//phCategories.Controls.Add(NavigationMenu);
}

MenuItem CreateMenuItem(String text, String url, String toolTip, String ImageUrl)
{
//创建一个新的MenuItem对象
MenuItem mainMenuItem = new MenuItem();
// 设置菜单项属性的对象使用
// 指定参数
mainMenuItem.Text = text;
mainMenuItem.NavigateUrl = url;
mainMenuItem.ToolTip = toolTip;
// menuItem.ImageUrl = ImageUrl;
mainMenuItem.PopOutImageUrl = ImageUrl;
mainMenuItem.Value = text;
return mainMenuItem;

}

MenuItem CreateMenuItem(String text, String url, String toolTip)
{
// Create a new MenuItem object.
MenuItem SubMenuItem = new MenuItem();
// 设置MenuItem的对象使用的属性
// the specified parameters.
SubMenuItem.Text = text;
SubMenuItem.NavigateUrl = url;
SubMenuItem.ToolTip = toolTip;
// menuItem.ImageUrl = ImageUrl;
SubMenuItem.Value = text;
return SubMenuItem;
}
MenuItem CreateMenuItem(String text, String url)
{
// Create a new MenuItem object.
MenuItem threeMenuItem = new MenuItem();
// 设置MenuItem的对象使用的属性
// the specified parameters.
threeMenuItem.Text = text;
threeMenuItem.NavigateUrl = url;
// threeMenuItem.ToolTip = toolTip;
// menuItem.ImageUrl = ImageUrl;
threeMenuItem.Value = text;
return threeMenuItem;
}
}
}
#endregion
...全文
282 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
safinyxf 2010-10-30
  • 打赏
  • 举报
回复
只要你用递归,就可以实现N级菜单
深海线 2010-10-30
  • 打赏
  • 举报
回复
自己顶上去,高手帮忙,我的基础差。
深海线 2010-10-30
  • 打赏
  • 举报
回复
我也知道有递归的分法啊,但是在ASP.NET 中的泛型集合,我不知道递归的写法。还请YXF 指教。
深海线 2010-10-29
  • 打赏
  • 举报
回复
给出另一个类的源码,从供分析用。
        /// <summary>
/// Gets all categories获取所有分类
/// 获取所有分类
/// </summary>
/// <returns>Categories</returns>
public static List<Category> GetAllCategories()
{
bool showHidden = NopContext.Current.IsAdmin;
return GetAllCategories(showHidden);
}


/// <summary>
/// Gets all categories
/// 获取所有分类
/// </summary>
/// <param name="showHidden">A value indicating whether to show hidden records一个值,指示是否显示隐藏的记录</param>
/// <returns>Categories</returns>
public static List<Category> GetAllCategories(bool showHidden)
{
var context = ObjectContextHelper.CurrentObjectContext;
var query = from c in context.Categories
orderby c.ParentCategoryId, c.DisplayOrder
where (showHidden || c.Published) &&
!c.Deleted
select c;
var unsortedCategories = query.ToList();

//sort categories
//TODO sort categories on database layer
var sortedCategories = unsortedCategories.SortCategoriesForTree(0);

return sortedCategories;
}

/// <summary>
/// Gets all categories by parent category identifier
/// 获取所有类别的父类别标识
/// </summary>
/// <param name="parentCategoryId">Parent category identifier</param>
/// <returns>Category collection</returns>
public static List<Category> GetAllCategoriesByParentCategoryId(int parentCategoryId)
{
bool showHidden = NopContext.Current.IsAdmin;
return GetAllCategoriesByParentCategoryId(parentCategoryId, showHidden);
}

/// <summary>
/// Gets all categories filtered by parent category identifier
/// 获取由父类所有类别过滤标识符
/// </summary>
/// <param name="parentCategoryId">Parent category identifier |父类标识符</param>
/// <param name="showHidden">A value indicating whether to show hidden records</param>
/// <returns>Category collection|分类集合</returns>
public static List<Category> GetAllCategoriesByParentCategoryId(int parentCategoryId,
bool showHidden)
{
var context = ObjectContextHelper.CurrentObjectContext;
var query = from c in context.Categories
orderby c.DisplayOrder
where (showHidden || c.Published) &&
!c.Deleted &&
c.ParentCategoryId == parentCategoryId
select c;
var categories = query.ToList();
return categories;
}

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧