我有一個頁面,我不想要在菜單中顯示。但是,當我在頁面上時,我想做希望它顯示在麪包屑中。如何從菜單中隱藏MvcSiteMapNode而不是麪包屑?
我試圖用ISiteMapNodeVisibilityProvider
類來做到這一點,但不知道如何確定提供的SiteMapNode
參數是否在菜單或麪包屑中。
我該怎麼做?
我有一個頁面,我不想要在菜單中顯示。但是,當我在頁面上時,我想做希望它顯示在麪包屑中。如何從菜單中隱藏MvcSiteMapNode而不是麪包屑?
我試圖用ISiteMapNodeVisibilityProvider
類來做到這一點,但不知道如何確定提供的SiteMapNode
參數是否在菜單或麪包屑中。
我該怎麼做?
您可以測試HTML幫助呼籲通過檢查sourceMetadata參數「的HtmlHelper」元素的可見性提供者。該參數自動傳遞給可見性提供者。
使用的名稱是類型的FullName(沒有程序集名稱的完全限定名稱)。
public class MyNodeNotOnMenuVisibilityProvider
: SiteMapNodeVisibilityProviderBase
{
public override bool IsVisible(ISiteMapNode node, IDictionary<string, object> sourceMetadata)
{
if (sourceMetadata.ContainsKey("HtmlHelper") && sourceMetadata["HtmlHelper"].ToString().Equals("MvcSiteMapProvider.Web.Html.MenuHelper"))
{
if (node.Key == "MyNode")
{
return false;
}
}
return true;
}
}
在V4中,您還可以通過使用sourceMetadata任何HTML幫助傳遞自定義信息,然後你還可以測試您的自定義的知名度提供定製信息。
@Html.MvcSiteMap().Menu(new { myInfo = "Something" })
過濾菜單項的簡單方法是按角色進行的。如果您未綁定到ISiteMapVisibilityProvider解決方案,則可以修改站點地圖文件和/或使用「授權」屬性。希望其中的一個可以提供幫助。
Mvc.sitemap:
<mvcSiteMapNode title="Secret Page" controller="RestrictedController" action="SecretAction" key="SecretPage" roles="MySecretRole" />
Controller/Action:
[Authorize(Roles="MySecretRole")]
To hide the menu item but keep the breadcrumbs, follow this: Here i am removing the child node "Products", but it will show in breadcrumbs.
<ul id="menu-nav" class="sf-menu" style="position:relative;transform:translateX(-50%);left:50%;margin-top:0px;">
@foreach (var node in Model.Nodes) {
<li class="current">@Html.DisplayFor(m => node)
@if (node.Children.Any()) {
if(node.Children.Count > 0)
{
for(int n=0;n < node.Children.Count;n++)
{
if(node.Children[n].Title == "Products")
{
node.Children.RemoveAt(n);
}
}
@Html.DisplayFor(m => node.Children)
}
}
</li>
}
這是一個非常糟糕的解決方案。你只是硬編碼模板中所有頁面的名稱...... –
這不回答我的問題。假設用戶已被授權查看該頁面。我想知道如何從菜單中隱藏節點,並在麪包屑中顯示它。我只是不想在菜單中顯示某些頁面。但是當我在頁面上時,我希望它顯示在麪包屑中。 –