Вы можете использовать диспетчер 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 на самом деле не «знает» о веб-части.