En mi proyecto MVC3, he instalado V.3.2.1 MvcSiteMapProvider de Maartenba y tengo un menú muy sencillo, estática, de dos niveles que he creado . A continuación se muestra la estructura del mapa conceptual.MvcSiteMapProvider - Páginas múltiple necesidad de vincular a un nodo Menú
- Home
- Member Center
- Member Listing [SELECTED]
- Event Calendar
- Documents
- Administration
Ahora, hay muchos sub-páginas bajo Listado de miembros (por ejemplo, información, Editar, etc.), pero No desea que estos muestran como elementos del menú nivel 3 (sobre todo porque están atados a una identificación de miembro específica). Sin embargo, sí quiero que todas estas páginas de tercer nivel estén "vinculadas" al nodo de menú Lista de miembros para que se muestren como seleccionadas cuando estén en estas páginas.
tengo el siguiente código en mi archivo Mvc.SiteMap:
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Member Center" area="Members" controller="Home" action="Index" roles="Approved Member" >
<mvcSiteMapNode title="Member Listing" area="Members" controller="Member" action="List" />
<mvcSiteMapNode title="Event Calendar" area="Members" controller="Event" action="List" />
<mvcSiteMapNode title="Documents" area="Members" controller="Document" action="List" />
</mvcSiteMapNode>
<mvcSiteMapNode title="Administration" area="Admin" controller="Home" action="Index" roles="Site Administrator" >
</mvcSiteMapNode>
</mvcSiteMapNode>
Para hacer que el menú, estoy usando el siguiente código en mi archivo _Layout.cshtml:
@Html.MvcSiteMap().Menu(1, true, true, 1, true, true)
Por último, he modificado el archivo SiteMapNodeModel.cshtml por lo que añade una clase "selectedMenuItem" al nodo que se correlaciona con la página el usuario está viendo. Aquí está el snippit que representa el nodo del menú.
@model SiteMapNodeModel
<a href="@Model.Url" class="@(Model.IsCurrentNode ? "selectedMenuItem" : "")">@Model.Title</a>
La visualización y navegación del mapa funciona bien, hasta que navego más hacia el área de miembros. Por ejemplo, si voy allá Members/Member/List
(que muestra el menú correctamente) y a una página como Members/Member/Detail/1
, los nodos hijos menores de Centro de usuarios ("Listado Miembro", "Calendario de Eventos", etc.) desaparecen. Por lo tanto, aquí están mis dos problemas que tengo con mi código actual:
quiero especificar que una determinada página es parte del nodo del menú principal "Centro de usuarios", de manera que los nodos del menú infantil de " Centro de miembros "se mostrará, independientemente de si la página dada se define como un nodo específico en la estructura del menú.
que desea especificar (posiblemente en la vista o controlador de acción) que una página específica debe estar atado a un nodo de menú específico. Por ejemplo, cuando el usuario está en
Members/Member/Detail/1
, simplemente quiero el nodo hijo "Listado Miembro" que se especifica comoIsCurrentNode
de manera que el archivo SiteMapNodeModel.cshtml adecuadamente decora con la clase "selectedMenuItem".
¿Alguna sugerencia?
Max, muchas gracias! Eso resuelve el problema básico de la desaparición de los nodos de segundo nivel. Sin embargo, ¿hay alguna forma de que sepa que el nodo del segundo nivel está configurado en IsCurrentNode cuando esto sucede? Por ejemplo, me gustaría que el nodo Listado de miembros se muestre como seleccionado cuando se encuentre en la página Detalles del miembro. Si no, no es un gran problema ... solo una solicitud estética. – bigmac