2012-08-17 57 views
8

Estoy usando el proveedor ASP.NET MVC SiteMap en un proyecto, y está funcionando muy bien. Sin embargo, estoy teniendo dificultades para tratar de descubrir cómo ocultar un elemento del menú. El elemento del menú que quiero ocultar para que se muestre en la navegación global es mi página "Mapa del sitio". Ahora sé que hay algo llamado VisibilityProvider disponible para mí en mvcSiteMapNode, pero parece que no puedo encontrar la manera de hacerlo funcionar.Proveedor ASP.NET MVC SiteMap - Cómo 'ocultar' elementos individuales en el menú real

Respuesta

5

Primero, le sugiero que lea esta página wiki: Creating a Custom SiteMapNodeVisibilityProvider. A continuación, para el nodo específico que apunta a su página Mapa del sitio, declarar de esta manera:

<mvcSiteMapNode title="Site Map" controller="Home" action="Map" visibility="false" /> 

Ahora, al aplicar la IsVisible método (que se muestra en la página wiki vinculado anteriormente), se puede hacer esto:

string visibility = mvcNode["visibility"]; 

// Is a visibility attribute specified? 
if (!string.IsNullOrEmpty(visibility)) 
{ 
    isVisible = Convert.ToBoolean(mvcNode["visibility"]); 

    if (!isVisible) 
    { 
      return false; 
    } 
} 

return true; 
6

Tomado de mi respuesta aquí que explica cómo ocultar los nodos y las opciones disponibles.

https://stackoverflow.com/a/27095721/853295

Debe utilizar esta guía sobre cómo ocultar un nodo

https://github.com/maartenba/MvcSiteMapProvider/wiki/Advanced-Node-Visibility-with-ISiteMapNodeVisibilityProvider

varios valores que puede establecer desde el enlace anterior:

<appSettings> 
    <!-- Visibility will not filter to children --> 
    <add key="MvcSiteMapProvider_VisibilityAffectsDescendants" value="false"/> 
    <!-- Set default visibility provider --> 
    <add key="MvcSiteMapProvider_DefaultSiteMapNodeVisibiltyProvider" value="MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider, MvcSiteMapProvider"/> 
</appSettings> 

Una vez que haya añadido la configuración de la aplicación, agregue lo siguiente a cualquier nodo que desee ver en las rutas de navegación pero no en el menú:

visibility="SiteMapPathHelper,!*" (SiteMapPathHelper - el nodo es visible en la SiteMapPath, * - que es invisible para el resto de los controles!)

por ejemplo:

<mvcSiteMapNode title="Administration" area="Admin" clickable="false" visibility="SiteMapPathHelper,!*" /> 

Otras opciones disponibles:

Tipo .......................... Lo que afecta
CanonicalHelper ....... El asistente Canonical HTML Helper
MenuHelper .............. El menú HTML Helper
MetaRobotsHelper .... El Asistente de HTML de Meta Robots
SiteMapHelper .......... El HTML de SiteMap Helper
SiteMapPathHelper ... el SiteMapPath HTML ayudante
SiteMapTitleHelper ... el ayudante Título HTML
XmlSiteMapResult .... la salida de mapas de sitio XML del punto final /sitemap.xml

+0

Esta es la solución más fácil, ya que hace no requiere código adicional. –

Cuestiones relacionadas