0

我是 MvcSiteMapProvider 的新手。不幸的是无法自己找到答案。我使用 MVC4 和 MvcSiteMapProvider 我的问题:

1)链接购买(和购买->搜索)将我链接到本地​​主机,但它必须是本地主机/购买/搜索

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>
       }
    }
 }
4

1 回答 1

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 方案。

链接Toy/Toy-Details/1不属于“购买”菜单

它未列在“购买”节点下的原因是您的动态节点提供程序未指定任何具有“ToyBuy”父键的节点。

通常,您需要在其主要类别下指定动态节点。转到搜索功能时,您可以使用单个节点。您可以使用preservedRouteParameters 属性来指定每个自定义路由参数(例如搜索词),这会将值从当前请求复制到节点并强制它每次都匹配节点。

首页 > 搜索

然后,当从搜索页面导航到特定搜索项目时,它会将您带到类别下列出的项目页面(在本例中为 ToyBuy)。

首页 > 购买 > 商品

有关使用 reservedRouteParameters 的可下载演示,请参阅如何使 MvcSiteMapProvider 记住用户的位置

另请注意,玩具详细信息不会出现在站点地图中。声明 DynamicNodeProvider 的节点只是一个模板节点,默认情况下,您的所有 DynamicNode 都具有其属性。

于 2013-11-16T03:45:21.040 回答