2016-02-09 48 views
0

我幾天前開始使用MVC站點地​​圖提供程序。 我的主要目標是創建2個菜單(主菜單和側面菜單),並且這些菜單的每個foreach遍歷其節點並根據特定的業務邏輯切換可見性。使MVC站點地​​圖只發送相關節點到可見性提供者

我已經使用this文章爲了使用我自己的可見性邏輯。

我的頁面佈局包含這些行:

@Html.MvcSiteMap().Menu(new { name = "MainMenu" }) 
@Html.MvcSiteMap().Menu(new { name = "SideMenu" }) 

在當前形勢下這兩條線遍歷所有在Mvc.sitemap指定的節點中的每一個,我需要先檢查,如果他們屬於主菜單或側面菜單,然後繼續我的邏輯。 我假設有一種方法可以在這兩個菜單之間劃分節點,並跳過檢查節點是否從中發送的菜單名稱的部分。

有什麼建議嗎?

感謝

回答

0

的 「命名的HTML助手」 沒有概念存在FilteredSiteMapNodeVisibilityProvider之外。如果您創建自定義提供程序,則在運行自定義邏輯之前,您需要檢查自己所在的菜單(just like in FilteredSiteMapNodeVisibilityProvider)。

但這並不意味着您無法將可見性提供程序中的代碼組織爲單獨的部分。

+0

當然,我組織我的代碼在我的*** IsVisible ***方法。 首先我檢查從哪個節點生成的名稱,然後才調用我的可見性邏輯。 但是這聽起來很奇怪,如果有一個選項可以在佈局文件中創建多個菜單,每個菜單都描述不同的菜單,爲什麼沒有辦法將每個菜單實例路由到mvc.sitemap文件中的其他節點? – Shim52

+0

我不明白這個問題。 「將每個菜單實例路由到其他節點」是什麼意思?每個菜單只是同一個SiteMap的不同視圖。請注意,如果您使用不同的菜單HTML幫助程序模板,則您不一定需要使用可見性提供程序,因爲您可以將可見性邏輯直接放在每個模板中。在這種情況下,如果菜單模板文件位於'/ Views/Shared/DisplayTemplates/MainMenu.cshtml',您將指定'@ Html.MvcSiteMap()。Menu(「MainMenu」)''。 – NightOwl888

+0

這種情況是,我正在創建一個網站,將爲我公司的內部用戶。 它將包含一個頂級菜單,在某個鏈接點擊後會打開一個包含相關菜單項的左側菜單。 可見性問題是,主菜單和側面菜單都會根據當前已認證的用戶顯示/隱藏項目。 我知道如何實現可見性部分,但不知道如何劃分這兩個菜單,實際上我希望每個人都鏈接到另一個站點地圖。 另外,側面菜單是動態的,應該包含根據當前主菜單選項的項目。 – Shim52

相關問題