以编程方式枚举发布页面布局的Web部件区域

时间:2011-02-15 18:44:41

标签: sharepoint sharepoint-2007 publishing sharepoint-object-model

我遇到的情况是我的类传递了一个PublishingPage实例,我想枚举在此页面的布局页面中使用的任何和所有Web部件区域。

事实证明这很艰难。

PublishingPage有一个名为Layout的属性,它的类型为PageLayout。这与PublishingLayoutPage不同,后者(最终)继承到具有Zones属性的Page。此PageLayout类型没有任何对具有我需要的Zones属性的普通ASP.NET页面类型的引用。

我可以从PublishingPage.Layout属性获取SPListItem和SPFile,并以原始文本形式获取页面布局的内容,但是这不能用XmlReader解析,因为它不是有效的XML(具有<%标签无效)。

我可以从PublishingPage.ListItem.Web获得一个SPWeb,这可以得到一个SPLimitedWebPartManager,我可以在这里获得一个LimitedWebParts(它有Zone信息)的集合 - 但这无济于事,因为在我的这个阶段代码我没有网页部件。

我很困惑,看起来发布基础设施与ASP.NET和SharePoint完全分离。

更新

我可以使用SPLimitedWebPartManager将虚拟Web部件(如新的ContentEditorWebPart)添加到Web部件区域(我有所使用区域的名称),但是当我将其保存并检查页面时(并获得一个新的SPLWPM),我可以恢复WebParts,但Zone属性为null(ZoneID属性已填充且正确)。

1 个答案:

答案 0 :(得分:0)

Wayne Fan在this thread的帖子似乎涵盖了你想要做的事情。希望这会有所帮助。