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的主要内容,如果未能解决你的问题,请参考以下文章