【问题标题】:asp.net cms page submenu not workingasp.net cms 页面子菜单不起作用
【发布时间】:2015-01-03 07:45:00
【问题描述】:

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

我有 2 个 MSSQL 数据库表:

万维网

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

类别

  • CAT_ID
  • CAT_NAME
  • CAT_SORTORDER

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

【问题讨论】:

  • 呃@空白我讨厌空白!
  • 发布为此代码呈现的 html
  • 你的意思是如果它包含任何类别,你想在一个节点内创建子菜单?
  • 是的,这正是我尝试做的
  • 如果有嵌套项,肯定会有嵌套循环。不确定 CAT 变量的使用。所有的动作都应该在这个语句的范围内发生:if (item.Categorie.ID.HasValue)

标签: c# asp.net


【解决方案1】:

我不确定你的菜单结构是什么,因为你没有一个很好的例子。但是,如果您正在执行以下操作:

<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 表如何表示数据以及您的预期输出示例后面填写更多详细信息,我相信我可以附加一个更具体的示例。

【讨论】:

  • 如果我的类别是空的,我没有任何 WWW 页面,所以这不是你想要的??
  • 上面的用法只是一个如何做嵌套菜单的例子。 (迭代菜单项的“子项”的内部循环的概念。)我不确定您的表结构应该代表什么,所以我只是举了一个例子。如果您可以展示菜单的外观示例(在 html 中)以及解释表格与该 html 输出的关系,我可以做一个处理代码的示例来展示它在您的情况下具体如何工作。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2015-11-11
    • 1970-01-01
    相关资源
    最近更新 更多