感谢您阅读我的问题。
以下情况:
- 基于自定义内容类型的共享点列表。内容类型只不过是具有一些额外属性的文件夹(如url,targetpage)。
- 文件夹内容类型和项目表示菜单结构。例如:
主页| www.home.com | home.aspx
---> Subhome | www.subhome.com | subhome.aspx
Impressum | www.impressum.com | impressum.aspx
这种结构没有限制它的深度或它可以包含多少项目/文件夹。唯一的限制是在文件夹中每个名称必须是唯一的。
由于性能,我需要一次获取列表中的所有项目,而不是每个文件夹。我用这种方式管理它:
SPQuery qry = new SPQuery();
qry.ViewAttributes = "Scope='RecursiveAll'";
之后,我将SPListItems转换为一个名为NavigationEntry的对象。该对象包含一个SiteMapNode和一些其他属性,如path,itemname和levelcount(例如Home / Subhome = level2,Impressum = level1)。
现在我把所有这些项目都放在一个字典中,路径+ itemname作为键(因为它是唯一的,并给我一个项目所在的提示)。之后,我使用linq访问这个词典并获取每个级别的项目级别,直到我到达结束(级别上没有可用的项目)。现在是棘手的部分。我必须将这个奇怪的结构“转换”为sharpoint的导航结构。因为我是分享点的新手,有时候这有点令人困惑。
目前我通过关卡并使用SiteMapNodeCollections创建SiteMapNodes,转到下一个级别,查看是否已存在parentitem,将子项放入其中,依此类推。这是有效的,但它非常复杂,肮脏和脆弱。
有没有“简单”或更有条理的方法来解决这个问题?我不是在寻找一个已编码的解决方案,而是寻找关于如何解决这个问题的正确方向。谢谢! :)
答案 0 :(得分:0)
如果只是一个导航树,我可以推荐JSTree
我曾经将它用于多级Quichnav代表。虽然我创建了一个管理界面来添加项目,但您可以在列表的更改事件中修改XML或Json。或者更喜欢每次扩展节点时都要进行查询。
希望这有帮助
拉斯