Dans mon projet @model SiteMapNodeModel
<a href="@Model.Url" class="@(Model.IsCurrentNode ? "selectedMenuItem" : "")">@Model.Title</a>
3 Réponses :
Vous pouvez ajouter des nœuds de 3ème niveau au site XML du site XML et spécifier la visibilité pour les masquer dans le menu. Voici la déclaration de nœud pour l'afficher uniquement dans la chapelure: edit: p> Autant que je sache, vous ne pouvez pas définir IscurrentNode. Mais vous pouvez vérifier si le nœud de menu est actuellement sélectionné avec le code suivant (je l'utilise dans le modèle d'affichage SitemapNodemodel): p>
Max, merci beaucoup! Cela résout le problème de base des nœuds de 2e niveau disparaissant. Cependant, est-ce qu'il y a de toute façon que vous savez avoir le noeud de deuxième niveau défini sur IscurrentNode lorsque cela se produit? Par exemple, j'aimerais que le nœud de la liste des membres indique comme sélectionné lors de la page Détails du membre. Sinon, ce n'est pas une affaire énorme ... juste une demande esthétique.
Ajout à la réponse de Max, je créerais également une méthode d'extension pour Sitemapnodemodel. Que vous pouvez utiliser pour implémenter toute la logique personnalisée nécessaire pour le faire:
/* Also check IsRealCurrentNode, depending on the use case maybe only
IsRealCurrentNode */
@if ((Model.IsCurrentNode || Model.IsRealCurrentNode()) && Model.SourceMetadata["HtmlHelper"].ToString() != "MvcSiteMapProvider.Web.Html.MenuHelper") {
<text>@Model.Title</text>
} else if (Model.IsClickable) {
<a href="@Model.Url ">@Model.Title</a>
} else {
<text>@Model.Title</text>
}
Suite à la réponse de Max Kiselev, si vous souhaitez utiliser cette technique, mais être capable d'utiliser des attributs sur vos actions de contrôleur, j'ai procédé aux éléments suivants:
Définissez un fournisseur de visibilité personnalisé: P>
[HttpGet]
[InvisibleMvcSiteMapNodeAttribute("ThisNodeKey", "ParentNodeKey")]
public ViewResult OrderTimeout()
{
return View("Timeout");
}