以编程方式枚举发布页面布局的 Web 部件区域
Posted
技术标签:
【中文标题】以编程方式枚举发布页面布局的 Web 部件区域【英文标题】:Programmatically enumerating Web Part Zones of a Publishing Page Layout 【发布时间】:2011-06-27 20:10:53 【问题描述】:我有一种情况,我拥有的一个类被传递了一个 PublishingPage 实例,我想枚举在此页面的布局页面中使用的任何和所有 Web 部件区域。
事实证明这很困难。
PublishingPage 有一个名为 Layout 的属性,它的类型为 PageLayout。这与 PublishingLayoutPage 不同,后者(最终)继承到具有 Zones 属性的 Page。此 PageLayout 类型没有对具有我需要的 Zones 属性的普通 ASP.NET Page 类型的任何引用。
我可以从 PublishingPage.Layout 属性中获取一个 SPListItem 和一个 SPFile,并以原始文本形式获取页面布局的内容,但这不能用 XmlReader 解析,因为它不是有效的 XML(具有
我可以从 PublishingPage.ListItem.Web 获得一个 SPWeb,这可以让我获得一个 SPLimitedWebPartManager,我可以在其中获得 LimitedWebParts 的集合(其中包含区域信息)——但这无济于事,因为在我的这个阶段代码 我没有 Web 部件。
我很困惑,看起来发布基础结构与 ASP.NET 和 SharePoint 完全分离。
更新:
我可以使用 SPLimitedWebPartManager 将虚拟 Web 部件(如新的 ContentEditorWebPart)添加到 Web 部件区域(我有使用的区域的名称),但是当我将其保存并重新检查页面时(并获得一个新的 SPLWPM),我可以取回 WebPart,但 Zone 属性为空(ZoneID 属性已填充且正确)。
【问题讨论】:
没有OOB解决方案...***.com/questions/3821067/… 如果我有一个 Page(asp.net 样式)实例,我可以破解/派生一个 SPWebPartManager,但这是在发布中,我根本无法访问 ASP.NET 派生对象。 【参考方案1】:Wayne Fan 在this thread 上的帖子似乎涵盖了您正在尝试做的事情。希望这会有所帮助。
【讨论】:
以上是关于以编程方式枚举发布页面布局的 Web 部件区域的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式在 WSS 3.0 的 Web 部件页面中插入列表作为 Web 部件
Sharepoint 2010 发布站点自定义页面布局 webpart 区域
如果 Kentico 宏不包含 Web 部件,则隐藏小部件区域/Web 部件区域