MVCサイトマッププロバイダ、隠しメニュー項目の親メニューを表示
-
21-12-2019 - |
質問
MVCサイトマッププロバイダを使用して、私のウェブサイトのメニューを作成し、現在のメニュー項目を強調表示しています。
私のコントローラでは、インデックス、詳細、追加、編集、削除方法があります。メニュー項目として、インデックスと追加メソッドのみが利用可能です。
詳細アクションの場合、現在のメインメニュー項目(製品)をハイライトしたいと思います。どうやってそうするのですか?
私は試してみました:
<mvcSiteMapNode title="Details" action="Details" visibility="IfSelected,!*" />
.
しかし、それはメニューを強調表示し、それを望まないにもかかわらず詳細はメニューにあります。
それから私は
を試しました<mvcSiteMapNode title="Details" action="Details" visibility="IfSelected,!*" preservedRouteParameters="id" />
.
詳細サブメニューをハイライト表示しますが、詳細サブメニューはメニューに隠されていて、メインメニュー項目( 'プロジェクト')が強調表示されています。
解決
あなたが明らかに達成しようとしている本当に2つの別々のものがありますが、あなたはそれらを単一の質問に結合しました。
まず、CRUD操作を行うには、記事 MvcSiteMapproverを作成する方法MVCSiteMapproverは、ユーザーの位置と付属のダウンロード可能なDemos 。具体的には、 mvcsitemaphider"> mvcsitemaphider"> mvcsitemaphider"> -forcing-a-match ノードのネスト方法を正確に示しているため、現在の要求、セットアップの可視性と一致させ、選択したレコードに従ってノード上のタイトルを動的に変更するように強制します。
あなたの質問の2番目の部分は、メニュー項目を強調表示するために出力HTMLを変更することです。これは、組み込み機能を使用して行うことができません。そのためには、/ views / shared/displaytemplates/sitemapnodemodel.cshtmlファイルを直接編集する必要があります。このファイルはNUGETパッケージによってMVCプロジェクトに追加され、アップグレード時に変更を上書きしないように注意してください。このファイルはメニュー、SiteMap、およびSiteMappath HTMLヘルパーによって共有されているので、メニューのコピーを作成するか、編集したい特定のHTMLヘルパーの分岐ロジックを常に使用して注意してください。
現在のページに最も近い照合ノードを決定するには、このビットのかみそりコードが必要です。
@{var isClosestVisibleMenuItem = false;}
@if ((Model.IsCurrentNode || (Model.IsInCurrentPath && !Model.IsRootNode && !Model.Descendants.Any()))
&& Model.SourceMetadata["HtmlHelper"].ToString() == "MvcSiteMapProvider.Web.Html.MenuHelper")
{
isClosestVisibleMenuItem = true;
}
.
@model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
@{var isClosestVisibleMenuItem = false;}
@if ((Model.IsCurrentNode || (Model.IsInCurrentPath && !Model.IsRootNode && !Model.Descendants.Any())) && Model.SourceMetadata["HtmlHelper"].ToString() == "MvcSiteMapProvider.Web.Html.MenuHelper")
{
isClosestVisibleMenuItem = true;
}
@if (Model.IsCurrentNode && Model.SourceMetadata["HtmlHelper"].ToString() != "MvcSiteMapProvider.Web.Html.MenuHelper") {
<text>@Model.Title</text>
} else if (Model.IsClickable) {
if (isClosestVisibleMenuItem)
{
<b>
@if (string.IsNullOrEmpty(Model.Description))
{
<a href="@Model.Url">@Model.Title</a>
}
else
{
<a href="@Model.Url" title="@Model.Description">@Model.Title</a>
}
</b>
}
else
{
if (string.IsNullOrEmpty(Model.Description))
{
<a href="@Model.Url">@Model.Title</a>
}
else
{
<a href="@Model.Url" title="@Model.Description">@Model.Title</a>
}
}
} else {
if (isClosestVisibleMenuItem)
{
<b>@Model.Title</b>
}
else
{
<text>@Model.Title</text>
}
}
.