我是MvcSiteMapProvider的新手。遗憾的是我自己找不到答案。 我使用MVC4和MvcSiteMapProvider 我的问题:
1)链接Buy(和Buy-> Search)将我链接到localhost但它必须是localhost / Buy / Search
2)玩具/玩具详细信息/ 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>
}
}
}
答案 0 :(得分:2)
MvcSiteMapProvider使用与MVC框架的其余部分相同的MVC UrlHelper类来生成URL。创建URL的方式取决于您的路由配置。有几种资源可用于帮助您配置MVC路由。这里有几个。
http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/asp-net-mvc-routing-overview-cs http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx http://msdn.microsoft.com/en-us/library/cc668201.ASPX
我不能比这更具体,因为你没有提到你想要生成的URL方案。
它未列在“购买”节点下的原因是因为您的动态节点提供程序未指定父键为“ToyBuy”的任何节点。
通常,您需要在其主类别下指定动态节点。转到搜索功能时,您可以使用单个节点。您可以使用savedRouteParameters属性指定每个自定义路由参数(例如,搜索项),这些参数会将当前请求中的值复制到节点,并强制它每次都与节点匹配。
主页&gt;搜索
然后,当从搜索页面导航到特定搜索项目时,它会转到该类别下列出的项目页面(在本例中为ToyBuy)。
主页&gt;购买&gt;项目
有关使用savedRouteParameters的可下载演示,请参阅How to Make MvcSiteMapProvider Rememeber a User's Position。
另请注意,玩具详细信息不会出现在SiteMap中。声明DynamicNodeProvider的节点只是一个模板节点,默认情况下,所有DynamicNodes都采用其属性。