动态更改父键 - IDynamicNodeProvider MVC

时间:2016-03-01 07:45:45

标签: asp.net-mvc mvcsitemapprovider

我根据此https://github.com/maartenba/MvcSiteMapProvider/wiki/Defining-sitemap-nodes-using-IDynamicNodeProvider

实施IDynamicNodeProvider

我想动态更改父键。根据我的菜单导航,我有很多父节点。 一些例子是

1) Home>Profile>Quality Policy
2) Home>eServices>eService 

我有两张桌子。在第一个我保留我的菜单。 MenuID,MenuTitle和另一个我存储我的内容。 ArticleID,ArticleTitle,ArticleContent,MenuID。

我需要动态更改父键。

这是我的班级

      public override IEnumerable<DynamicNode>   GetDynamicNodeCollection(ISiteMapNode node)

    { 
        webdata storeDB = new webdata();

        var returnValue = new List<DynamicNode>();


        foreach (var article in storeDB.SiteContents) 
        {


            DynamicNode enode = new DynamicNode();
            enode.Title = article.ArticleTitle;

            enode.ParentKey = "?";
            //Specify Controller and Action name
            enode.Controller = "SiteContents";
            enode.Action = "ArticleDetails";
            enode.RouteValues.Add("id", article.ArticleID);
            enode.PreservedRouteParameters.Add("slug");
            returnValue.Add(enode);


            yield return enode;
        }


    }

我的站点地图文件

<mvcSiteMapNode title="Home" controller="Home" action="Index">

 <mvcSiteMapNode  controller="SiteContents"   dynamicNodeProvider="Myproject.Models.ElkeDynamicNodeProvider, Myproject"  />
 </mvcSiteMapNode>

如何加入这两个表,以便将MenuTitle作为parentKey以及如何在正确的操作中链接它。 谢谢

1 个答案:

答案 0 :(得分:1)

每个节点不可能有多个父节点或动态更改父键。

我不确定您到底想要实现的目标,但请注意,可以通过向该页面提供2个唯一网址并使用canonicalKey或{{1}来multiple navigation paths to a page在其中一个上阻止搜索引擎惩罚你。

另请注意,您实际上可以使用数据库中主键和/或外键的变体来创建节点。因此,如果您在数据库中拥有关系,则可以基于相同的关系创建动态节点。

例如,如果canonicalUrl表中有MenuID(或者可以加入表以获得相应的Article,则只需循环遍历每个表并创建一个基于MenuID的键(例如MenuID),用于菜单实体的键和文章实体的父键。每篇文章都有一个键MenuID1234,它可以用作下一级别的父键。

实施例

ArticleID3456