C# ASP.Net LINQ中的数据库驱动嵌套菜单
嗨,我正在尝试解决这个问题,我正在从数据库中获取数据并创建菜单:C# ASP.Net LINQ中的数据库驱动嵌套菜单,c#,asp.net,linq,menu,menuitem,C#,Asp.net,Linq,Menu,Menuitem,嗨,我正在尝试解决这个问题,我正在从数据库中获取数据并创建菜单: if (Context.User.IsInRole("Admin") == true) { mnMenu.Items.Clear(); List<menuRole> menuParentList = new List<menuRole>(); List<MenuItem> menuItem
if (Context.User.IsInRole("Admin") == true)
{
mnMenu.Items.Clear();
List<menuRole> menuParentList = new List<menuRole>();
List<MenuItem> menuItemList = new List<MenuItem>();
List<MenuItem> hoverItem = new List<MenuItem>();
int parentPosition = 0;
string menuName;
menuParentList = roles.getMenuItems().ToList();
for (int i = 0; i < menuParentList.Count; i++)
{
if (menuParentList[i].menuType == "Admin")
{
if (menuParentList[i].MenuRole1 == "parent")
{
menuName = menuParentList[i].menuName.ToString();
menuItemList[i].Text = menuName;
parentPosition = i;
}
else if (menuParentList[i].MenuRole1 == "child")
{
hoverItem[i].Text = menuParentList[i].menuName;
hoverItem[i].NavigateUrl = menuParentList[i].MenuLink;
menuItemList[i].ChildItems.Add(hoverItem[i]);
}
}
}
mnMenu.Items.Add(menuItemList[0]);
mnMenu.Items.Add(menuItemList[1]);
mnMenu.Items.Add(menuItemList[2]);
}
嗯,这似乎做出了一些(太多)假设:
mnMenu.Items.Add(menuItemList[2]);
你应该检查一下你有多少东西
对HoverItem也一样
编辑,取3 不能使用
i
为menuList和hoverItem集合编制索引,它们不会每一步都增长
if (menuParentList[i].MenuRole1 == "parent")
{
menuName = menuParentList[i].menuName.ToString();
var newItem = new MenuItem();
newItem.Text = menuName;
menuItemList.Add(newItem);
parentPosition = menuItemList.Count-1; // flaky
}
else if (menuParentList[i].MenuRole1 == "child")
{
var newItem = new MenuItem();
newItem.Text = menuParentList[i].menuName;
newItem.NavigateUrl = menuParentList[i].MenuLink;
hoverItem.Add(newItem);
//menuItemList[i].ChildItems.Add(hoverItem[i]);
menuItemList[parentPosition].ChildItems.Add(newItem); // I think
}
我在这行代码中得到错误:menuItemList[i].Text=menuName;对,我发现了。请参见Edit.well,它对父项运行良好,但悬停项上仍会出现相同的错误:S else if(menuParentList[i]。MenuRole1==“child”){hoverItem.Add(new MenuItem());hoverItem[i]。Text=menuParentList[i].menuName;hoverItem[i].NavigateUrl=menuParentList[i].MenuLink;menuItemList[i].ChildItems.Add(hoverItem[i]);}正确,我将更改我的答案。效果很好只是一些小的更改谢谢!你是最棒的!!menuItemList[i].Text=menuName;这将添加父标题的名称。
if (menuParentList[i].MenuRole1 == "parent")
{
menuName = menuParentList[i].menuName.ToString();
menuItemList.Add(new MenuItem()); // add this
menuItemList[i].Text = menuName;
parentPosition = i;
}
if (menuParentList[i].MenuRole1 == "parent")
{
menuName = menuParentList[i].menuName.ToString();
var newItem = new MenuItem();
newItem.Text = menuName;
menuItemList.Add(newItem);
parentPosition = menuItemList.Count-1; // flaky
}
else if (menuParentList[i].MenuRole1 == "child")
{
var newItem = new MenuItem();
newItem.Text = menuParentList[i].menuName;
newItem.NavigateUrl = menuParentList[i].MenuLink;
hoverItem.Add(newItem);
//menuItemList[i].ChildItems.Add(hoverItem[i]);
menuItemList[parentPosition].ChildItems.Add(newItem); // I think
}