我还没有找到答案的一个问题是这个问题。如何在多个级别上跟踪活动的Sitemap节点?
例如:
如何跟踪正在激活的子节点以及它所属的父节点被标记为活动状态。
我知道有一些名为IsDescendant的东西,但由于空值,我总是在使用它时会遇到异常。
是否有一些关于在mvc.net(或asp.net)中进行更高级自定义导航的截屏/教程。大多数似乎都处理简单的单级导航。
如果可能,我更喜欢C#中的示例,谢谢。
答案 0 :(得分:1)
好的,,,我遇到了同样的问题,我想出了一个解决方法,在这个问题中检查我的答案:
Hierarchical menu in view based on parent child class
我一直想提出一种更通用的优雅方式,因为我遇到了这个问题,但从那时起我一直很忙。我希望我能在接下来的几周内找到一些时间来提出一些东西,,,
注意:为了简化我在方法DisplayMenu
和ConvertToItem
特殊性中的上述问题的解决方案,我删除了应该检查{的部分{1}}和currentMenuID
字段,并将currentMenuItemID
css类添加到li元素(或您的current
类)。
由于这就是你的问题所在,我已经提供了以下完整的方法。
active
我不认为这是解决问题的完美解决方案,我讨厌在C#代码中编写HTML,我会尽力为这个问题提出一个更通用(多层次)的清洁解决方案,当然在框架中使用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 ""; }
}
类。