現在のノードとその親を css クラスでマークしたいと思います。私は周りを検索していて、これらのリンクを見つけました:
http://mvcsitemap.codeplex.com/discussions/257786 http://mvcsitemap.codeplex.com/discussions/245000
そのため、SiteMapNodeModelList.cshtml を変更すると、現在のノードが強調表示されます。しかし、親ノードを強調表示する方法がわかりません。
<ul>
@foreach (var node in Model) {
<li class="@(node.IsCurrentNode ? "current" : "")" >@Html.DisplayFor(m => node)
@if (node.Children.Any()) {
@Html.DisplayFor(m => node.Children)
}
</li>
}
</ul>
親ノードをマークするために、すべての直接の子要素をチェックする拡張メソッドを作成しました (2 つのレベルしかありません)。
public static bool IsCurrentNodeOrChild(this SiteMapNodeModel node)
{
if (node.IsCurrentNode) return true;
return node.Children.Any(n => n.IsCurrentNode);
}
MenuHelperModel.cshtml を次のように変更しました。
<ul id="menu">
@foreach (var node in Model.Nodes) {
<li class="@(node.IsCurrentNodeOrChild() ? "current" : "d")" >@Html.DisplayFor(m => node)
@if (node.Children.Any()) {
@Html.DisplayFor(m => node.Children)
}
</li>
}
</ul>
これで完全に機能するようになりました。しかし、もっと簡単なアプローチは本当にないのでしょうか? これを必要とする人は地球上で初めてではないでしょうか?