私は MvcSiteMapProvider の初心者です。残念ながら、自分で答えを見つけることはできません。MVC4 と MvcSiteMapProvider を使用しています 私の質問:
1) リンク購入 (および購入->検索) はローカルホストにリンクしますが、localhost/購入/検索でなければなりません
2) Toy/Toy-Details/1 のリンクは「購入」メニューに属していません (このリンク メニューにアクセスすると、購入 -> 検索が消えます) よろしくお願いします。
私の Mvc.sitemap:
<mvcSiteMapNode title="Home"
controller="Toy"
action="Index"
key="Home">
<mvcSiteMapNode title="Buy"
controller="Toy"
action="Search"
key="ToyBuy">
<mvcSiteMapNode title="Search"
controller="Toy"
action="Search"
key="ToySearch">
<mvcSiteMapNode title="Toy Search Result"
controller="Toy" action="Search-Result"
key="ToySearchResult">
<mvcSiteMapNode title="Toy Details"
controller="Toy"
action="Toy-Details"
key="ToyDetail" dynamicNodeProvider="MyToys.Web.DynamicNodeProviders.ToySearchDynamicNodeProvider,MyToys.Web"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
<mvcSiteMapNode title="Publish" controller="Toy" action="Publish" description=""/>
<mvcSiteMapNode title="Published" controller="Toy" action="Published" key="ToyPublished" description="">
<mvcSiteMapNode title="Edit" controller="Toy" action="Edit"
preservedRouteParameters="id" key="ToyPublishedEdit" visibility="false" description=""/>
</mvcSiteMapNode>
および ToySearchDynamicNodeProvider:
public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
{
var rep = new ToyRepository();
foreach (var Toy in rep.Get())
{
DynamicNode dynamicNode = new DynamicNode();
dynamicNode.ParentKey = "ToySearchResult";
dynamicNode.RouteValues.Add("id", Toy.ID);
yield return dynamicNode;
}
}
ちなみに、MenuHelperModel.cshtml も書き換えます。
<div class="hmenu">
<ul class="tabs">
@foreach (var node in Model.Nodes)
{
<li>@Html.DisplayFor(m => node)</li>
}
</ul>
</div>
@foreach (var node in Model.Nodes)
{
if (node.IsInCurrentPath)
{
if (node.Children.Any())
{
<div class="vmenu">
<ul class="tabs">
@foreach (var child in node.Children)
{
<li><a href="@child.Url">@child.Description</a></li>
}
</ul>
</div>
}
}
}