Ben*_*Ben 6 .net c# sitemap asp.net-mvc-3
我正在尝试为我的网站开发站点地图,以便在需要时维护URL参数.我正在使用MvcSiteMapProvider并尝试使用动态节点来保存各个节点的路由数据.但是,我遇到的问题是动态节点的子节点.当我在我的站点地图文件中的动态节点中嵌套节点时,它不会显示在使用Html.MvcSiteMap().SiteMap()生成的站点地图上,当我导航到该页面时,我丢失了所有的面包屑BEFORE动态节点.
例如,如果我的动态节点被称为"人员详细信息",则面包屑在"人员详细信息"页面上显示如下:
Home > People > Person Details
Run Code Online (Sandbox Code Playgroud)
但是当我进一步浏览页面时,说"联系人",面包屑看起来像这样:
Person Details > Contact Person
Run Code Online (Sandbox Code Playgroud)
没有前两条路径.此外,如果我尝试导航回Person Details,则不会保留任何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>
Run Code Online (Sandbox Code Playgroud)
我的动态节点提供程序如下所示:
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();
}
Run Code Online (Sandbox Code Playgroud)
有什么我想念的吗?我感觉我刚刚离开了一些东西,但我对网络开发很新,而且在这一点上真的只是在黑暗中刺伤.
您不需要动态节点提供程序.
<mvcSiteMapNode title="Person Details" controller="Information" action="PersonDetails" preservedRouteParameters="id">
<mvcSiteMapNode title="Contact Person" controller="Information" action="Contact" />
</mvcSiteMapNode>
Run Code Online (Sandbox Code Playgroud)
适合你正在做的事情.