2010-10-30 99 views
2

我還沒有找到答案的一個問題是這樣的。如何跟蹤多個級別上的活動Sitemap節點?MVC2多級導航

例如:

  • 節點1個
  • 節點2 「活性」
    • 子節點1
    • 子節點2 「活性」
  • 節點3

如何跟蹤正在活動的子節點以及它所屬的父節點是否被標記爲活動狀態。

我知道有一種稱爲IsDescendant的東西,但由於空值而使用它時總是會出現異常。

是否有一些關於在mvc.net(或asp.net)中進行更高級的自定義導航的截屏/教程。大多數似乎處理簡單的一級導航。

如果可能,我寧願在C#中使用示例,謝謝。

回答

1

好吧,,,我從同樣的問題遭遇,我想出了一個解決辦法,請查看我的回答這樣一個問題:

Hierarchical menu in view based on parent child class

我一直想出自從我遇到問題以來,這是一種更通用的優雅方式,但自那以後我一直很忙。我希望我會找到在未來幾週一些時間來的東西,,,


注意:在我的解決方案爲簡單起見,在對上述問題的方法DisplayMenuConvertToItem特殊性,我刪除了應檢查currentMenuIDcurrentMenuItemID字段的部分,並將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 ""; } 
    } 

我不認爲這是一個完美的解決問題的辦法,我討厭在C#代碼編寫HTML,我會盡我所能,拿出一個更通用(多級)清潔的解決方案的問題,當然也可以在框架中使用TagBuilder類。

+0

哇,這是有幫助的。我已經搜索和搜索,沒有發現任何真正有用的東西在這個問題上。我會試試這個。 – 2010-10-31 22:38:05