我有一种情况,我有一个类传递一个PublishingPage实例,我想枚举在此页面的布局页面中使用的任何和所有Web部件区域.
事实证明这很艰难.
PublishingPage有一个名为Layout的属性,它的类型为PageLayout.这与PublishingLayoutPage不同,后者(最终)继承到具有Zones属性的Page.此PageLayout类型没有任何引用具有我需要的Zones属性的普通ASP.NET页面类型.
我可以从PublishingPage.Layout属性获取SPListItem和SPFile,并以原始文本形式获取页面布局的内容,但是这不能用XmlReader解析,因为它不是有效的XML(<%标签无效).
我可以从PublishingPage.ListItem.Web获得一个SPWeb,这可以让我得到一个SPLimitedWebPartManager,在那里我可以得到一个LimitedWebParts(它有区域信息)的集合 - 但这没有用,因为在我的代码的这个阶段我有没有网页部分.
我很困惑,看起来发布基础设施与ASP.NET和SharePoint完全脱节.
更新:
我可以使用SPLimitedWebPartManager将虚拟Web部件(如新的ContentEditorWebPart)添加到Web部件区域(我有所使用的区域的名称),但是当我将其保存并检查页面时(并获取)一个新的SPLWPM),我可以恢复WebParts,但Zone属性为null(ZoneID属性已填充且正确).
sharepoint publishing sharepoint-2007 sharepoint-object-model