gpt4 book ai didi

c# - MvcSiteMapProvider——动态节点的子节点不会出现在面包屑或站点地图中

转载 作者:太空狗 更新时间:2023-10-29 21:19:26 26 4
gpt4 key购买 nike

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

例如,如果我的动态节点名为“Person Details”,则面包屑在“Person Details”页面上如下所示:

Home > People > Person Details

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

Person Details > Contact Person

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

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

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

<?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 开发还很陌生,此时真的只是在摸索。

最佳答案

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

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

适合您正在做的事情。

关于c# - MvcSiteMapProvider——动态节点的子节点不会出现在面包屑或站点地图中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6431462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com