我在网站上创建子菜单时遇到问题
我有2个MSSQL数据库表:
WWW
分类
我的foreach
sb.Append("<ul class=\"Menu\">");
foreach (WWW item in WWW.Fetch(null, null, null))
{
if (item.Active)
{
//All pages that doesnt have a categorie
if (!item.Categorie.ID.HasValue)
{
sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a></li>", item.Name, item.ID.ToString());
}
//All pages that have a categorie
if (item.Categorie.ID.HasValue)
{
//Split different categories.
if (CAT != item.Categorie.Name)
{
CAT = item.Categorie.Name;
sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a></li>", item.Categorie.Name, item.ID.ToString());
}
}
}
CAT = "";
}
sb.Append("</ul>");
我失去了我需要创建开始UL和关闭UL的地方 我何时需要重置我的String CAT。 感谢
答案 0 :(得分:0)
我不确定菜单的结构是什么,因为你没有一个很好的例子。但是,如果您正在做类似的事情:
<ul>
<li>Category</li>
<li>Catefory
<ul>
<li>Page</li>
</ul>
</li>
<\ul>
然后你需要做类似的事情:
sb.Append("<ul class=\"Menu\">");
foreach (Categories category in Categories.Fetch(null, null, null))
{
if (category.Active)
{
sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a>", category.Name, category.ID.ToString());
var pages = WWW.Fetch(p => p.Categorie.ID.Equals(category.ID));
if(pages.Any()) {
sb.Append("<ul>");
foreach(WWW page in pages) {
sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a></li>", page.Name, page.ID.ToString());
}
sb.Append("</ul>");
}
sb.Append("</li>");
}
}
sb.Append("</ul>");
我意识到这并不是最符合您需求的,但应该是菜单背后逻辑的一个很好的例子。如果您可以填写类别和WWW表如何表示数据的更多细节以及您的预期输出的示例,我相信我可以附加更具体的示例。
答案 1 :(得分:0)
只需创建一个函数并将上面的代码放在该函数中,并在项包含类似值时递归调用它:
public void NestedMenuCalling(List<Categorie> WWW)
{
sb.Append("<ul class=\"Menu\">");
foreach (WWW item in WWW.Fetch(null, null, null))
{
if (item.Active)
{
//All pages that doesnt have a categorie
if (!item.Categorie.ID.HasValue)
{
sb.AppendFormat("<li><a href=\"page?id={1}\">{0}</a></li>", item.Name, item.ID.ToString());
}
//All pages that have a categorie
if (item.Categorie.ID.HasValue)
{
//Split different categories.
if (CAT != item.Categorie.Name)
{
CAT = item.Categorie.Name;
NestedMenuCalling(item.Categorie);
}
}
}
CAT = "";
}
sb.Append("</ul>");
}