Asp.net mvc MVC2多级导航

Asp.net mvc MVC2多级导航,asp.net-mvc,Asp.net Mvc,我还没有找到答案的一个问题是这个。如何在多个级别上跟踪活动的站点地图节点 例如: 节点1 节点2“活动” 子节点1 子节点2“活动” 节点3 如何跟踪处于活动状态的子节点以及它所属的父节点标记为活动状态 我知道有一个叫做IsDescendant的东西,但我在使用它时总是会因为空值而出现异常 是否有一些关于在mvc.net(或asp.net)中进行更高级自定义导航的屏幕广播/教程。大多数似乎处理简单的一级导航 我更喜欢C#中的例子,如果可能的话,谢谢。好的,,,我也遇到过同样的问题,我想

我还没有找到答案的一个问题是这个。如何在多个级别上跟踪活动的站点地图节点

例如:

  • 节点1
  • 节点2“活动”
    • 子节点1
    • 子节点2“活动”
  • 节点3
如何跟踪处于活动状态的子节点以及它所属的父节点标记为活动状态

我知道有一个叫做IsDescendant的东西,但我在使用它时总是会因为空值而出现异常

是否有一些关于在mvc.net(或asp.net)中进行更高级自定义导航的屏幕广播/教程。大多数似乎处理简单的一级导航


我更喜欢C#中的例子,如果可能的话,谢谢。

好的,,,我也遇到过同样的问题,我想出了一个解决办法,检查我在这个问题上的答案:

自从我面对这个问题以来,我一直想想出一个更通用、更优雅的方法来做这件事,但从那以后我一直很忙。我希望我能在接下来的几周里找点时间想出点办法


注意:为了简化我在方法
显示菜单
转换项
中对上述问题的解决方案,我已经删除了它应该检查
currentMenuID
currentMenuItemID
字段的部分,并将
current
css类添加到li元素中(在您的例子中是
active
类)

因为这就是你的问题所在,我在下面提供了完整的方法

public static string DisplayMenu(this HtmlHelper helper, NavigationModel navigationMenu)
    {            
        string classOfCurrentMenu;


        String result = "<ul id='main-nav'>\n";
        foreach(Menu menu in navigationMenu.Menus)
        {
            classOfCurrentMenu = "";
            if (menu.ID == navigationMenu.currentMenuID)
            {
                classOfCurrentMenu = "current";
            }

            result +=     "<li>\n";
            result +=         string.Format("<a href='#' class='{0}'> {1} </a>\n", helper.AttributeEncode(classOfCurrentMenu),helper.AttributeEncode(menu.Name));
            result +=         "<ul>\n";
            foreach(MenuItem item in menu.MenuItems)
            {
                result += NavigationHelper.ConvertToItem(helper, item, navigationMenu.currentMenuID, navigationMenu.currentMenuItemID);
            }
            result +=         "</ul>\n";
            result +=     "</li>\n";
        }
        result +=     "</ul>\n";

        return result;
    }


private static string ConvertToItem(this HtmlHelper helper,MenuItem item, int currentMenuID, int currentMenuItemID)
    {
        if (item.Show)
        {
            string classOfCurrentItem = "";
            if (item.ID == currentMenuItemID && item.MenuID == currentMenuID)
                classOfCurrentItem = "current";

            return string.Format("<li><a href='{0}' class='{1}'>{2}</a></li>\n", helper.AttributeEncode(item.Link), helper.AttributeEncode(classOfCurrentItem), helper.AttributeEncode(item.Label));
        }
        else { return ""; }   
    }
公共静态字符串显示菜单(此HtmlHelper帮助程序,NavigationModel navigationMenu)
{            
当前菜单的字符串类;
字符串结果=“\n”;
返回结果;
}
私有静态字符串ConvertToItem(此HtmlHelper帮助程序、MenuItem项、int currentMenuID、int currentMenuItemID)
{
如果(项显示)
{
字符串classOfCurrentItem=“”;
if(item.ID==currentMenuItemID&&item.MenuID==currentMenuID)
classOfCurrentItem=“当前”;
返回string.Format(“
  • \n”、helper.attributencode(item.Link)、helper.attributencode(classOfCurrentItem)、helper.attributencode(item.Label)); } else{return”“;} }

    我不认为这是一个完美的解决方案,我讨厌在C代码中编写HTML,我会尽我所能想出一个更通用的(多层次)更清洁的解决方案,当然在框架中使用<代码> TagBuilder <代码>类。我找了又找,在这个问题上没有找到任何真正有用的东西。我试试这个。