0
我有一個菜單,我從列表中填充,我希望子菜單動態顯示,具體取決於從列表返回的內容。目前,我可以顯示兩個級別,並且我可以繼續添加foreach循環以添加更多級別,但我希望能夠動態調整,以便菜單不受邏輯中循環數量的限制。如何使菜單動態增長C#
public string CreateDynamicMenu()
{
HtmlGenericControl navbar = new HtmlGenericControl("nav");
navbar.Attributes.Add("class", "navbar navbar-default");
HtmlGenericControl containerDiv = new HtmlGenericControl("div");
containerDiv.Attributes.Add("class", "container-fluid");
HtmlGenericControl collapseDiv = new HtmlGenericControl("div");
collapseDiv.Attributes.Add("class", "collapse navbar-collapse");
HtmlGenericControl navUl = new HtmlGenericControl("ul");
navUl.Attributes.Add("class", "nav navbar-nav");
// mainMenuA.Attributes.Add("href", "~/Default.aspx");
var myMenu = menuListForUserG.GetMenus(Global.CurrentProfile.UserID).OrderBy(x => x.MenuOrder).ThenBy(y => y.MenuName);
var navbarmenu = myMenu.Where(x => x.ParentID == null);
foreach (var menuLevel1 in navbarmenu)
{
HtmlGenericControl dropdownLi = new HtmlGenericControl("li");
dropdownLi.Attributes.Add("class", "dropdown");
HtmlGenericControl mainMenuA = new HtmlGenericControl("a");
mainMenuA.Attributes.Add("href", "~/Default.aspx");
mainMenuA.InnerText = menuLevel1.MenuName;
dropdownLi.Controls.Add(mainMenuA);
var navbarsubmenu = myMenu.Where(x => x.ParentID == menuLevel1.MenuID);
if (navbarsubmenu.IsAny())
{
HtmlGenericControl dropdownUl = new HtmlGenericControl("ul");
dropdownUl.Attributes.Add("class", "dropdown-menu");
foreach (var menuLevel2 in navbarsubmenu)
{
HtmlGenericControl dropdownsubmenuLi = new HtmlGenericControl("li");
dropdownsubmenuLi.Attributes.Add("class", "dropdown-submenu");
HtmlGenericControl subMenuA = new HtmlGenericControl("a");
subMenuA.Attributes.Add("href", "~/Default.aspx");
subMenuA.InnerText = menuLevel2.MenuName;
dropdownsubmenuLi.Controls.Add(subMenuA);
dropdownUl.Controls.Add(dropdownsubmenuLi);
dropdownLi.Controls.Add(dropdownUl);
navUl.Controls.Add(dropdownLi);
}
}
}
collapseDiv.Controls.Add(navUl);
containerDiv.Controls.Add(collapseDiv);
navbar.Controls.Add(containerDiv);
StringBuilder htmlStringBuilder = new StringBuilder();
HtmlTextWriter htmlStringWriter = new HtmlTextWriter(new StringWriter(htmlStringBuilder));
navbar.RenderControl(htmlStringWriter);
String output = htmlStringBuilder.ToString();
return output;
}
你知道如何使用「遞歸」嗎? – Enigmativity
您需要添加或重構您的方法以遞歸。具體而言,您將繼續構建菜單,直到您的查詢導致零孩子。 – pnm
這就是我困惑的地方,我不確定那會是什麼樣子。 – Nakres