随着MvcSiteMapProvider是否有可能以编程方式注册大量的索引范围之间的页面?(With

2019-11-03 09:24发布

我期待在MVCSiteMapProvider ,但我找不到任何文档,让我通过指数来注册大量的URL。 我有以下

http://example.com/story/1
...
...
http://example.com/story/7000000

我希望能够使用图书馆在许多不同的文件自动为这些。 我已经通过所有的文档阅读,但不能发现任何东西。 看来真的是全功能的,虽然,所以我想我自己的滚动解决方案之前,我会问。

Answer 1:

您可以使用动态节点提供者或实现ISiteMapNodeProvider以编程方式从任何来源提供自己的数据(包括自定义IDS)。

可以在不使用外部依赖注入容器中加入动态节点供应商,但你需要添加一个“模板”节点无论是在XML或利用.NET属性附加的提供者(见上面的链接)。

public class StoryDynamicNodeProvider : DynamicNodeProviderBase
{
    public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
    {
        // Entities would be your entity framework context class
        // or repository.
        using (var entities = new Entities())
        {
            // Create a node for each blog post
            foreach (var story in entities.Stories)
            {
                DynamicNode dynamicNode = new DynamicNode();
                dynamicNode.Title = story.Title;

                // The key of the node that this node will be the child of.
                // This works best if you explicitly set the key property/attribute 
                // of the parent node.
                dynamicNode.ParentKey = "Home"; 
                dynamicNode.Key = "Story_" + story.Id;
                dynamicNode.Controller = "Story";
                dynamicNode.Action = "Details";

                // Add the "id" (or any other custom route values)
                dynamicNode.RouteValues.Add("id", story.Id);

                yield return dynamicNode;
            }
        }
    }
}

使用ISiteMapNodeProvider你可以建立整个网站地图的结构包括根节点,但目前它需要使用外部DI容器注入自定义实现。

有一个例子在这里 ,你会如何实现ISiteMapNodeProvider自己。 下面是一个例子注射使用SimpleInjector自定义实现的。

请注意,目前正在数以千计的服务器上的节点总数的10秒的限制,因为他们被缓存在内存中,所以如果你有使用preservedRouteParameters许多节点是一个更好的选择。 然而,它有单独的网址只能出现在SiteMapPath控件,但不是在菜单,网站地图,或XML的搜索引擎网站地图的限制。



Answer 2:

我认为这将是你正在寻找的答案:

添加下面的节点在你的站点地图。

preservedRouteParameters = “ID”

还有更多的文档在这里, 如何配置MVCSiteMap实现参数?



文章来源: With MvcSiteMapProvider Is it possible to programmatically register lots of pages between index ranges?