Создайте веб-страницу с веб-частью программно
Я хочу создать несколько страниц веб-частей (программно) с пользовательскими веб-частями. Я искал в интернете, но не мог найти ничего, что я мог бы получить на работу.
Вот мой код (где я создаю страницу приветствия, а не страницу веб-части):
using (SPSite site = new SPSite("http://v99-sp-public/"))
{
using (SPWeb web = site.OpenWeb())
{
PublishingSite pSite = new PublishingSite(site);
SPContentType ctype = pSite.ContentTypes["Welcome Page"];
PageLayoutCollection pageLayouts = pSite.GetPageLayouts(ctype, true);
PageLayout pageLayout = pageLayouts["/_catalogs/masterpage/welcomesplash.aspx"];
PublishingWeb pWeb = PublishingWeb.GetPublishingWeb(web);
PublishingPageCollection pPages = pWeb.GetPublishingPages();
PublishingPage pPage = pPages.Add("Klanten2.aspx", pageLayout);
SPListItem newpage = pPage.ListItem;
newpage["Title"] = "Klanten";
newpage.Update();
newpage.File.CheckIn("Checkin");
newpage.File.Publish("Publisch");
}
}
Пожалуйста, помогите мне,
Благодарю.
2 ответа
Решение
Вы можете добавить веб-части, используя SPLimitedWebPartManager
и ваш URL определения веб-части. Этот пример должен помочь вам начать:
XmlTextReader reader = new XmlTextReader(new StringReader(web.GetFileAsString(<Url to your .webpart file here>)));
SPLimitedWebPartManager wpm = web.GetLimitedWebPartManager(<URL to your page>, Syste.Web.UI.WebControls.WebParts.PersonalizationScope.Shared);
WebPart wp = (WebPart) wpm.ImportWebPart(reader, out errMsg);
wp.Title = "My Title for this webpart";
wpm.AddWebPart(wp, <Name of WebpartZone here, e.g. "Header">, <Zone Index here>);
wpm.SaveChanges(wp);
После того, как вы заполните пробелы, этот код поместит веб-часть на вашу страницу публикации. В конце концов, наиболее важные функции SPLimitedWebPartManager.ImportWebPart
а также SPLimitedWebPartManager.AddWebPart
при создании экземпляра менеджера WebPart для страницы публикации.
ОК, немного покопался... вот мое решение.
using(SPSite site = new SPSite("http://my.dev.com"))
{
using(SPWeb web = site.OpenWeb())
{
SPFile page = web.GetFile("SitePages/Welcome.aspx");
using(SPLimitedWebPartManager manager = page.GetLimitedWebPartManager(PersonalizationScope.Shared))
{
string errMsg = string.Empty;
SPFile myWebPart = web.GetFile("_catalogs/wp/myWebPart.webpart");
XmlTextReader read = newXmlReader(myWebPart.OpenBinaryStream());
var wp = manager.ImportWebPart(read, out errMsg);
manager.AddWebPart(wp, "<Webpart Zone>", 1);
manager.SaveChanges(wp);
}
}
}