Sharepoint - 由于 ListId 属性,无法在 Visual Studio 中重复使用导出 ListViewWebPart

Posted

技术标签:

【中文标题】Sharepoint - 由于 ListId 属性,无法在 Visual Studio 中重复使用导出 ListViewWebPart【英文标题】:Sharepoint - Exporting ListViewWebPart cannot be reused in Visual Studio due to ListId property 【发布时间】:2015-07-10 05:46:05 【问题描述】:

这是我的问题:

在 SharePoint 上,我创建了一个“连接”到列表的 CQWP/ListViewWebPart。使用将此 WP 导入 Visual Studio,我需要动态更改 ListGuid,因为列表创建会在每个部署中创建一个新的 ListGuid。使用 Truez 答案,我设法使 CQWP 工作

 ContentByQueryWebPart cqwp = wp as ContentByQueryWebPart;
 cqwp.ListGuid = list.ID.ToString();
 mgr.SaveChanges(cqwp);

 <property name="ListGuid" type="string">2c3e1e58-4fca-4b0e-a982-ffe5ac770ae4</property>

但是对于 ListViewWebPart,使用相同的想法会引发错误

XsltListViewWebPart xslt = wp as XsltListViewWebPart;
xslt.ListId = list.ID;
mgr.SaveChanges(xslt);

<property name="ListId" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">68296faf-1aac-40c0-8d35-42bd3e12ec3b</property>

System.Reflection.TargetInvocationException -> 列表不存在 (使用调试器,列表不为空,我确实在 xslt.ListId = list.ID 中得到了它的 ID;

有什么想法吗?

【问题讨论】:

【参考方案1】:

我之前所做的是使用代码将 Web 部件添加到页面中,这使您可以更灵活地更改和更新上述属性。

我写这篇文章的原因是因为我们在列表设置中动态生成视图,因此在给定时间我们没有 ID,但视图存在!

希望对你有帮助

 /// <summary>
    /// Adds list view webpart dynaically to the page.
    /// </summary>
    /// <param name="web">A Web object</param>
    /// <param name="filepath">The full URL of the page you want to add the web part to.param>
    /// <param name="listdisplayname">The display name of the list that the web part needs to reference</param>
    /// <param name="viewname">The display name of the view  the web part needs to look at.</param>
    /// <param name="xsllinkurl">The relative URL to the XLT file to apply.</param>
    /// <param name="zoneidname">The name of the zone to add the webpart to.</param>
    /// <param name="zoneIndex">The index to add the webpart.</param>
    private static void AddListViewWebPartToPage(SPWeb web, string filepath, string listdisplayname, string viewname, string xsllinkurl, string zoneidname, int zoneIndex)
    
        SPList list = web.Lists.TryGetList(listdisplayname);

        SPLimitedWebPartManager wpm = web.GetLimitedWebPartManager(filepath, System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);

        XsltListViewWebPart wp = new XsltListViewWebPart();
        wp.ID = Guid.NewGuid().ToString("B");
        wp.ListName = list.ID.ToString("B").ToUpper();
        wp.ViewGuid = list.Views[viewname].ID.ToString("B").ToUpper();
        wp.XslLink = xsllinkurl;
        wp.ChromeType = PartChromeType.None;

        wpm.AddWebPart(wp, zoneidname, zoneIndex);

    

我相信使用上面的代码只需将列表名称设置为 ID 就足够了。

干杯 真实的

【讨论】:

感谢 Truez 的回答。关于它,我创建了一个查找列表 ID 的事件接收器,并尝试在 WebPart 属性中更改它。我的 WP 之一是 ContentQuery,所以使用此代码 太好了,我相信它也可以很容易地修改为内容查询。如果您觉得这很有用,请标记为答案!

以上是关于Sharepoint - 由于 ListId 属性,无法在 Visual Studio 中重复使用导出 ListViewWebPart的主要内容,如果未能解决你的问题,请参考以下文章

使用元数据搜索 SharePoint 结果

SharePoint 通过各种对象触发工作流

SharePoint 通过各种对象触发工作流

SharePoint 通过各种对象触发工作流

RestKit 添加属性映射和关系映射

SharePoint 2010/Silverlight:以编程方式传递自定义参数