我期待在MVCSiteMapProvider ,但我找不到任何文档,让我通过指数来注册大量的URL。 我有以下
http://example.com/story/1
...
...
http://example.com/story/7000000
我希望能够使用图书馆在许多不同的文件自动为这些。 我已经通过所有的文档阅读,但不能发现任何东西。 看来真的是全功能的,虽然,所以我想我自己的滚动解决方案之前,我会问。
我期待在MVCSiteMapProvider ,但我找不到任何文档,让我通过指数来注册大量的URL。 我有以下
http://example.com/story/1
...
...
http://example.com/story/7000000
我希望能够使用图书馆在许多不同的文件自动为这些。 我已经通过所有的文档阅读,但不能发现任何东西。 看来真的是全功能的,虽然,所以我想我自己的滚动解决方案之前,我会问。
您可以使用动态节点提供者或实现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的搜索引擎网站地图的限制。
我认为这将是你正在寻找的答案:
添加下面的节点在你的站点地图。
preservedRouteParameters = “ID”
还有更多的文档在这里, 如何配置MVCSiteMap实现参数?