0

サイトで MVC サイトマップ プロバイダーを使用しており、一度に最大 3 つのバージョンのナビゲーションをページに表示しています。

まず、トップレベル:

@Html.MvcSiteMap("MvcSiteMapProvider").Menu(0, true, false, 1)

トップレベルのページを表示するときに再利用されるサブセクション:

@Html.MvcSiteMap("MvcSiteMapProvider").Menu(2, 1, true)

これが私のサイトマップの 2 レベルのセクションです。

<mvcSiteMapNode title="Bid Manager" description="This is an example of a section description" controller="Bid" action="Index" icon="&#x28;">
      <mvcSiteMapNode title="Create / Edit Sale Event" description="This is an example of a section description" controller="Bid" action="Manage" icon="&#x29;" />
      <mvcSiteMapNode title="Bidding Status Manager" description="This is an example of a section description" controller="Bid" action="Status" icon="&#x5d;" />
    </mvcSiteMapNode>

...そしてここに表示テンプレートがあります

@model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel

@using System.Web.Mvc.Html @using MvcSiteMapProvider.Web.Html.Models

@{ // デフォルト文字列 itemIcon = "1"; string listClass = "メニュー項目";

// Pick up options in custom parameters
if (Model.MetaAttributes.ContainsKey("icon")) {
    itemIcon = Model.MetaAttributes["icon"].ToString();
}
if (Model.MetaAttributes.ContainsKey("disabled") && (Model.MetaAttributes["disabled"].ToString() == "true")) {
    listClass = "disabled";
    itemIcon = "&#x55;";
}

// Check if this node is active
listClass = (Model.IsCurrentNode || Model.IsInCurrentPath) ? "active" : listClass;


// Show stuff
<li class="@listClass">
<div class="menu-icon" aria-hidden="true" data-icon="@Html.Raw(itemIcon)"></div>
<p>
@if (listClass == "disabled") {
    <span>@Model.Title</span>
}
else {
    <a href="@Model.Url">@Model.Title</a>
}
</p>
<p class="description">@Model.Description</p>
</li>

}

サブレベル ナビゲーションの各インスタンスで表示テンプレートが同一になり、CSS による外見上の違いがすべてあるようにしています。私がやりたいことは、条件付きで説明属性を含めることです。たとえば、説明のみをレンダリングします。

現在、説明はすべてのメニューに対してレンダリングされ、不要な部分については CSS で非表示になっています。これは明らかに汚い修正です。

これは、サイトマップを呼び出す前に変数を設定し、その変数を表示テンプレートで使用するなど、より広範な MVC の質問である可能性があります。

任意の提案をいただければ幸いです。

ありがとう!

4

1 に答える 1