asp.net cms页面子菜单不工作

本文关键字:菜单 工作 面子 net cms asp | 更新日期: 2023-09-27 18:29:22

我在我的网站上创建子菜单时遇到问题

我有2个MSSQL数据库表:

WWW

  • WWW_ID
  • CAT_ID->FK到类别
  • WWW_NAME

类别

  • CAT_ID
  • CAT_NAME
  • 分类排序

我的前臂

    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以及何时需要重置字符串CAT。感谢

asp.net cms页面子菜单不工作

我不太确定菜单的结构是什么,因为你没有一个好的例子。然而,如果你正在做这样的事情:

<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表如何表示数据的背后再详细一点,并提供一个预期输出的示例,我相信我可以附加一个更具体的示例。

只需创建一个函数,将上面的代码放入该函数中,并在项目包含类别值时递归调用它,如下所示:

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>");
    }