如何在SharePoint网站中获取具有相同名称的多个列表?

时间:2009-06-16 16:16:52

标签: sharepoint sharepoint-api

我有一个从自定义网站定义创建的SharePoint网站。网站定义具有以下功能:

  1. 自定义内容类型。
  2. 自定义列表模板,其schema.xml文件引用该内容类型。
  3. 列表实例功能,它引用了我上面的列表模板功能。
  4. 在站点配置过程中,我按照上面的顺序通过C#代码激活每个功能(每个功能都在SPWeb级别)。我的结果网站看起来像我期望的那样,似乎工作正常,但它有一个奇怪的神器,我的网站的“所有网站内容”页面显示我的自定义列表两次。

    我的列表行为正常 - 它的项目接收器正确启动并且只启动一次。在SharePoint Manager (SPM)中,我还看到列表显示两次,当我展开树以查看属性时,它们在两个列表中显示相同(甚至列表中的列表项)。我怀疑我可能在欺骗自己,SPM可能只是两次查看同一个列表,而一些实际的流氓列表位于我网站的阴影中。

    那么,这里可能出现什么问题?我怎么能创建多个同名的列表?如何正确创建此列表?如何正确清理出现此行为的现有网站中的怪异?


    修改 在回答Michael Stum的问题时,我创建了这个控制台应用程序来遍历网站的列表并获取ID:

    using (SPSite site = new SPSite("http://myserver/projects/myproject"))
    {
        using (SPWeb web = site.OpenWeb())
        {
            var lists = web.Lists;
            foreach (SPList list in lists)
            {
                Console.WriteLine(list.ID + ": " + list.Title);
            }
        }
    }
    

    此代码显示我的列表两次 - 相同的标题,相同的ID。


    另一个编辑: 我查看了此站点的SharePoint内容数据库,并执行了此查询:

    SELECT * FROM AllLists where tp_webid = '<my SPWeb guid>'
    

    这表明只有一个实际列表包含我从上面的C#代码中检索到的标题和GUID。那么当我浏览我的网站时,是什么导致这些多个条目出现?

5 个答案:

答案 0 :(得分:3)

我多次遇到过这个问题。这不是一个错误,很可能你的列表模板的elements.xml中存在语义错误。

如果列表定义包含多个默认视图,则会显示上述症状。检查列表模板的elements.xml文件,确保其中没有多个View-Element。

亲切的问候 Ramon的

答案 1 :(得分:1)

我建议你打电话给微软,这听起来像个bug。

P.S。没有看到创建列表的实际解决方案,我们无法确定发生了什么,也许某个功能被激活了两次......

答案 2 :(得分:1)

今天我遇到了这个问题,在阅读了上述答案后,我提出了一个简单的解决方案。只需创建一个新的默认视图,文档库将再次正常显示。

亲切的问候,

Thijmen Groenewegen

P.S

我通过将库从一个地方迁移到另一个地方来“创建”相同的两个库。在旧地方,图书馆只展示了一次。如果我查看该库的默认视图,则会将两个视图检查为“默认”。

答案 3 :(得分:1)

Groenewegen就在现场。

在我在子网站上运行Export-SPWeb后,我在网站上找到了两个公告列表,然后在Import-SPWeb上将其移动到新的网站集。

要修复它,我为列表创建了一个新的默认视图,所有列表项,从两个所有项目视图中选择一个并将其删除,问题已得到解决。

公告列表在“查看所有网站内容”页面上显示两次,并且在查看“所有项目”页面时,数据显示两次。

此外,在创建新的默认视图之前必须执行的中间步骤是打开列表或库并在URL中添加“?contents = 1”,以便打开Web部件维护页面并“关闭” “其中一个重复。您必须执行此操作,因为如果存在多个Web部件,则Web部件功能区将不会显示在“通知”页面上,并且您需要功能区才能访问视图下拉菜单并创建新视图。

答案 4 :(得分:0)

您是否尝试过:

list.RootFolder.Name

(显示“内部”名称 - 网址的一部分)

list.Title 显示显示名称(可以显示两次或更多次)。

这也可能是您获得多个列表的原因。您可能已经添加了相同的显示名称但不是“内部”名称?