【问题标题】:MvcSiteMapProvider -- Children of dynamic nodes don't show up in breadcrumbs or sitemapMvcSiteMapProvider——动态节点的子节点不显示在面包屑或站点地图中
【发布时间】:2011-06-21 20:18:24
【问题描述】:

我正在尝试为我的网站开发站点地图,以便在需要时维护 URL 参数。我正在使用 MvcSiteMapProvider 并尝试使用动态节点来保留各种节点的路由数据。但是,我遇到的问题是动态节点的子节点。当我在站点地图文件的动态节点中嵌套一个节点时,它不会显示在使用 Html.MvcSiteMap().SiteMap() 生成的站点地图上,并且当我导航到该页面时,我会丢失之前的所有面包屑动态节点。

例如,如果我的动态节点名为“人员详细信息”,则面包屑在“人员详细信息”页面上如下所示:

Home > People > Person Details

但当我进一步导航到页面时,说“联系人”,面包屑看起来像这样:

Person Details > Contact Person

没有前两条路径。此外,如果我尝试导航回“人员详细信息”,则不会保留任何 url 参数(例如,不是转到 http://localhost:55555/Home/People/PersonDetails?id=12,而是转到 http://localhost:55555/Home/People/PersonDetails)。

当我尝试使用 Html.MvcSiteMap().SiteMap() 显示整个站点地图时,它会输出正确的层次结构直到动态节点。站点地图为在动态节点提供程序中找到的每个“Person”节点列出了一个唯一节点,但不显示动态节点的任何子节点。

我的站点地图看起来像这样(缩写):

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-3.0" enableLocalization="true">
  <mvcSiteMapNode title="Home"  controller="Home" action="Index">
    <mvcSiteMapNode title="People" controller="Information" action="People">
      <mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" dynamicNodeProvider="MySite.Code.PersonDetailsDynamicNodeProvider, MySite">
        <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" />
      </mvcSiteMapNode>
    </mvcSiteMapNode>
  </mvcSiteMapNode>
</mvcSiteMap>

我的动态节点提供程序如下所示:

public class PersonDetailsDynamicNodeProvider : DynamicNodeProviderBase
{
    List<Person> people = proxy.GetPeople();

    public override IEnumerable<DynamicNode> GetDynamicNodeCollection()
    {
        var nodes = new List<DynamicNode>();

        foreach (var person in people)
        {
            DynamicNode node = new DynamicNode();
            node.RouteValues.Add("id", person.ID);

            nodes.Add(node);
        }

        return nodes;
    }

    static private PersonServiceClient proxy = new PersonServiceClient();
}

我有什么遗漏吗?我觉得我刚刚遗漏了一些东西,但我对 Web 开发还很陌生,现在真的只是在黑暗中摸索。

【问题讨论】:

    标签: c# .net asp.net-mvc-3 sitemap


    【解决方案1】:

    您不需要动态节点提供程序。

    <mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" preservedRouteParameters="id">
      <mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" />
    </mvcSiteMapNode>
    

    工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多