Добавить веб-часть на страницу sharepoint в разметке aspx

У меня есть страница aspx, которая копируется в каталог макетов установки Project Server. Aspx - это страница веб-части, которая имеет зону веб-частей. Как добавить веб-часть в разметку страницы в зоне веб-частей?


person kjv    schedule 17.02.2009    source источник
comment
Для всех, кто видит этот вопрос и хочет встроить веб-части в страницу aspx, я начал связанный с этим вопрос (но все еще очень другой. Мой основан на том, что страницы aspx помещаются в раздел макетов страниц сайта sharepoint. stackoverflow.com/questions/31229284/   -  person redfox05    schedule 05.07.2015


Ответы (2)


В каталоге макетов не может быть настраиваемых страниц веб-частей! Это поддерживается только на страницах веб-частей, хранящихся в библиотеке документов или другой папке в SPWeb, то есть файлах ASPX, на которые вы можете получить ссылку на SPFile. Веб-части на страницах ASPX в каталоге макетов должны быть добавлены как веб-элементы управления в источник ASPX.

person Lars Fastrup    schedule 17.02.2009
comment
Я вижу, но похоже, что страница ProjectCenter (ps / pwa / projects.aspx - для моей установки) - это страница веб-части в каталоге макетов. Есть ли способ обойти упомянутое вами ограничение для создания аналогичной страницы веб-части? - person kjv; 18.02.2009
comment
Что ж, если URL-адрес не содержит _layouts, значит, файла нет в папке макетов. Для меня это больше похоже на то, что projects.aspx находится в корневой папке веб-сайта, то есть SPWeb.RootFolder - person Lars Fastrup; 18.02.2009

Вы можете использовать диспетчер SPLimitedWebPart для добавления экземпляра веб-части во время выполнения. Я делаю это на наших личных сайтах, чтобы контролировать добавление, удаление и перемещение веб-частей, которые требуются организации. Вы можете поместить код на страницу aspx.

SPFile thePage = currentWeb.RootFolder.Files["default.aspx"]
using (Microsoft.SharePoint.WebPartPages.SPLimitedWebPartManager spLimitedWPManager = thePage.GetLimitedWebPartManager(System.Web.UI.WebControls.WebParts.PersonalizationScope.Shared))
{
       Assembly assembly = Assembly.Load("WebPartAssemblyName");
       WebPart webPart = (WebPart)assembly.CreateInstance("WebPartClassName");

       spLimitedWPManager.AddWebPart(webPart, ZoneId, ZoneIndex);
}

Возможно, вам придется сделать что-то другое, чтобы получить доступ к диспетчеру веб-частей для своей страницы макетов. После этого вам нужно перенаправить обратно на страницу для отображения изменений. Вы также захотите сохранить битовое значение, чтобы гарантировать, что вы не выполняете действие при каждом последующем посещении.

Если вам нужно сделать это только один раз, я могу порекомендовать PowerShell.

В противном случае вы можете добавить веб-часть прямо в MarkUp, зарегистрировав тег:

<%@ Register TagPrefix="ABC" Namespace="Namespace" Assembly="Assembly" %>

и напрямую добавляя веб-часть,

<ABC:ClassName ID="ControlID" FrameType="None" runat="server" __WebPartId="YouWebPartGUID" WebPart="true" />

но мы не делали этого внутри веб-зоны, потому что мы не хотели разрешать его удаление, поэтому я не знаю, работает ли это в этом сценарии. Это самый простой способ, но он не позволяет выполнять какие-либо настройки, а SharePoint на самом деле «не знает» о веб-части.

person webwires    schedule 17.02.2009