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

5

我的情况是,我有一个类,它接收一个PublishingPage实例,并且我想枚举在此页面的布局页中使用的所有Web部件区域。

这证明是很困难的。

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

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

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

我非常困惑,看起来发布基础结构与ASP.NET和SharePoint都相当独立。

更新:

我可以使用SPLimitedWebPartManager向Web部件区域添加虚拟Web部件(例如新ContentEditorWebPart),但是当我保存并检查页面时将其签入(并获取新的SPLWPM)时,我可以收到WebParts ,但Zone属性为null(ZoneID属性填充并正确)。


1
没有现成的解决方案...在SharePoint中,如何从对象模型列出特定页面的所有WebPartZone? - Sylvain Reverdy
如果我有一个页面(asp.net风格)实例,我可以破解/派生出SPWebPartManager,但这是在发布中,我根本无法访问ASP.NET派生对象。 - James Love
1个回答

0

Wayne Fan在本帖中的回复似乎涵盖了您所尝试的内容。希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接