Nel mio progetto MVC3, ho installato MvcSiteMapProvider versione 3.2.1 di Maartenba e ho una molto semplice statica del menu,, a due livelli che ho creato . Di seguito è riportata la struttura concettuale della mappa.MvcSiteMapProvider - più pagine necessità di collegare con un nodo Menu
- Home
- Member Center
- Member Listing [SELECTED]
- Event Calendar
- Documents
- Administration
Ora, ci sono molti sotto-pagine in elenco Stati (ad esempio Dettaglio, Modifica, ecc), ma Non vogliono questi visualizzate come voci di menu 3 ° livello (soprattutto perché sono legate a un ID membro specifico). Tuttavia, voglio che tutte queste pagine di terzo livello siano "vincolate" al nodo del menu Elenco membri in modo che venga visualizzato come selezionato su queste pagine.
ho il seguente codice nel mio file 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>
Per rendere il menù, io sto usando il seguente codice nel mio file _Layout.cshtml:
@Html.MvcSiteMap().Menu(1, true, true, 1, true, true)
Infine, Ho modificato il file SiteMapNodeModel.cshtml in modo che aggiunga una classe "selectedMenuItem" al nodo correlato alla pagina visualizzata dall'utente. Ecco lo snippit che esegue il rendering del nodo del menu.
@model SiteMapNodeModel
<a href="@Model.Url" class="@(Model.IsCurrentNode ? "selectedMenuItem" : "")">@Model.Title</a>
La visualizzazione e la navigazione della mappa funzionano bene, fino a quando non mi muovo ulteriormente nell'area membri. Ad esempio, se si supera lo Members/Member/List
(che visualizza correttamente il menu) e in una pagina come Members/Member/Detail/1
, i nodi figlio in Member Center ("Elenco membri", "Calendario eventi", ecc.) scompaiono. Pertanto, ecco i miei due problemi che ho con il mio codice corrente:
voglio specificare che una data pagina fa parte del nodo menu principale "Centro del membro", in modo che i nodi del menu figlio di " Centro membri "verrà visualizzato, indipendentemente dal fatto che la pagina specificata sia definita come nodo specifico nella struttura del menu.
Desidero specificare (possibilmente nella vista o nell'azione del controller) che una pagina specifica debba essere collegata a un nodo di menu specifico. Ad esempio, quando l'utente è allo
Members/Member/Detail/1
, voglio semplicemente che il nodo figlio "Elenco membri" sia specificato comeIsCurrentNode
in modo che il file SiteMapNodeModel.cshtml lo decori correttamente con la classe "selectedMenuItem".
Qualche suggerimento?
Max, grazie mille! Questo risolve il problema di base dei nodi di secondo livello che scompaiono. Tuttavia, è comunque possibile che il nodo di secondo livello sia impostato su IsCurrentNode quando questo accade? Ad esempio, vorrei che il nodo Elenco membri fosse visualizzato come selezionato nella pagina Dettagli membro. In caso contrario, non è un grosso problema ... solo una richiesta estetica. – bigmac