У меня есть ситуация, когда у меня есть класс, которому передан экземпляр PublishingPage, и я хочу перечислить все зоны веб-частей, которые используются на странице макета для этой страницы.
Это сложно.
PublishingPage имеет свойство под названием Layout, которое имеет тип PageLayout.Это отличается от PublishingLayoutPage, который наследует (со временем) страницу, которая имеет свойство Zones.Этот тип PageLayout не имеет ссылки на обычный тип страницы ASP.NET, который обладает необходимым мне свойством Zones.
Я могу получить SPListItem и SPFile из свойства PublishingPage.Layout и получить содержимоемакет страницы в необработанном текстовом виде, но его нельзя проанализировать с помощью XmlReader, поскольку он не является допустимым XML (содержит <% тегов, которые являются недопустимыми). </p>
Я могу получить SPWeb из PublishingPage.ListItem.Web,и это может дать мне SPLimitedWebPartManager, где я могу получить коллекцию LimitedWebParts (которая содержит информацию о зоне) - но это не поможет, потому что на этом этапе моего кода у меня нет веб-частей.
I 'Я застрял, похоже, инфраструктура публикаций совершенно не связана с ASP.NET и SharePoint.
ОБНОВЛЕНИЕ:
Я могу использовать SPLimitedWebPartManager для добавления фиктивноговеб-часть (например, новый ContentEditorWebPart) в зону веб-части (у меня есть имена используемых зон), но когда я сохраняю это и проверяювозвращаясь (и получая новый SPLWPM), я могу вернуть WebParts, но свойство Zone имеет значение null (свойство ZoneID заполнено и правильно).