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

问题描述:

我遇到这样的情况:我有一个类传递了一个PublishingPage实例,并且想枚举在此页面的布局页面中使用的任何和所有Web部件区域。以编程方式枚举发布页面布局的Web部件区域

这证明很难。

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

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

我可以从PublishingPage.ListItem.Web中获得一个SPWeb,并且这可以让我获得一个SPLimitedWebPartManager,我可以在其中获得一个LimitedWebParts集合(它具有区域信息) - 但这不会有帮助,因为在这个阶段我的代码我没有Web部件。

我很坚持,它看起来像发布基础结构是从ASP.NET和SharePoint分离。

UPDATE:

我可以使用SPLimitedWebPartManager添加一个虚拟的网络部分(如新ContentEditorWebPart)到Web部件区域(我所使用的区域的名称),但是当我保存并检查返回的页面(并获得一个新的SPLWPM),我可以返回WebParts,但Zone属性为空(ZoneID属性填充并正确)。

+1

没有OOB解决方案... http://*.com/questions/3821067/in-sharepoint-how-to-list-all-webpartzones-of-a-specific-page-from-object-model – 2011-02-15 19:28:09

韦恩范的帖子this thread似乎涵盖了你想要做的事情。希望这可以帮助。