感谢您阅读我的问题。
以下情况:
- 基于自定义内容类型的共享点列表。内容类型只不过是一个带有一些额外属性(如 url、targetpage)的文件夹。- 文件夹内容类型和项目代表一个菜单结构。例如:
主页 | www.home.com | home.aspx
---> 子主页 | www.subhome.com | subhome.aspx 印象
| www.impressum.com | 印象.aspx
这种结构没有限制它的深度或它可以包含多少项目/文件夹。唯一的限制是文件夹内的每个名称都必须是唯一的。
由于性能的原因,我需要一次获取列表中的所有项目,而不是每个文件夹。我是这样管理的:
SPQuery qry = new SPQuery();
qry.ViewAttributes = "Scope='RecursiveAll'";
之后,我将 SPListItems 转换为一个名为 NavigationEntry 的对象。该对象包含一个 SiteMapNode 和一些其他属性,例如路径、项目名称和级别计数(例如 Home/Subhome = level2,Impressum = level1)。
现在我将所有这些项目放在一个字典中,路径+项目名作为键(因为它是唯一的,并且给了我项目所在位置的提示)。之后,我使用 linq 访问该字典并获取每个级别的项目级别,直到我到达末尾(级别上没有可用的项目)。现在是棘手的部分。我必须将这个奇怪的结构“转换”为 sharppoint 的导航结构。因为我是 sharepoint 的新手,所以有时这有点令人困惑。
目前,我通过关卡并使用 SiteMapNodeCollections 创建 SiteMapNodes,进入下一个关卡,查看父项是否已经存在,将子项放入其中等等。这行得通,但它非常复杂、肮脏和脆弱。
有没有“简单”或更结构化的方法来解决这个问题?我不是在寻找已经编码的解决方案,而是在寻找有关如何解决此问题的正确方向的任何提示。谢谢!:)