2012-05-14 49 views
0

當MVC.sitemap文件中沒有列出當前動作時,是否可以強制站點地圖控件呈現菜單?噹噹前動作不在Mvc.sitemap文件中時,MVC Sitemap會呈現爲空

我有一個簡單的頂級導航。當前操作位於站點地圖中時,對.Menu()的調用將呈現正確的<ul><li>..數據。但是,如果我在站點地圖(例如/ Home/Login)中訪問了而不是的頁面,則它根本不會顯示任何html(甚至不包含評論,只是空白空間)。這不是[authorize]問題;當我在'/ Home/Index'時菜單很好。

它似乎應該呈現所請求的內容,但是沒有設置IsCurrentNodeIsNodeInPath屬性。這裏是我做

<div id="main-nav"> 
    @Html.MvcSiteMap().Menu(0, true, true, 1) 
</div> 

的Mvc.sitemap文件調用:

<mvcSiteMapNode title="Home" controller="Home" action="Index"> 
    <mvcSiteMapNode title="Form New Human" controller="Person" action="Create"/> 
    <!-- there is no mvcSiteMapNode for "Home" "Login" --> 
</mvcSiteMapNode> 

回答

1

發現它周圍的方式。它顯然不是一個內置的擴展方法,或者至少我找不到一個。你可以打電話Html.MvcSitemap().Menu(Html.MvcSiteMap.Provider.RootNode,...),但我不想實例化助手兩次。

<div id="main-nav"> 
@{ 
    var sm = Html.MvcSiteMap(); 
    @sm.Menu(sm.Provider.RootNode, true, true, 2); // 2 levels (home, plus main nav) 
} 
</div> 

在拆卸環顧四周,似乎表明,它的工作原理有點像這樣:

  • 真的需要一個起始節點
  • 如果你不給它一個,它試圖找到一個基於當前節點
    • 加限制(正向搜索,深度限制等)
    • ,如果你想從1級節點,你必須知道你是
  • 從那返回null什麼級別,起始節點是空的,這意味着輔助寫入一個空字符串

有可能是技巧的組合,或者是兩個或兩個以上的技巧組合,這些都可以做到這一點,但我現在找不到它。這適用於我的需求(簡單的頂級菜單)。必須有一個更簡單的方法來做到這一點,有些是通配符,或者是基於路線的,而且最接近的匹配事情正在進行。我認爲菜單是一個相當標準的網絡應用程序的一部分,這將包括:)

相關問題