以编程方式创建包含 Web 部件的 Web 部件页面

Posted

技术标签:

【中文标题】以编程方式创建包含 Web 部件的 Web 部件页面【英文标题】:Create a webpart page with an webpart with in it programmatically 【发布时间】:2012-01-15 17:46:24 【问题描述】:

我想创建几个包含自定义 Web 部件的 Web 部件页面(以编程方式)。 我已经搜索了 internetz,但找不到任何我可以开始工作的东西。

到目前为止,这是我的代码(我在其中创建欢迎页面,而不是 Web 部件页面):

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");
                 
              

请帮帮我,

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用SPLimitedWebPartManager 和您的webPart 定义URL 添加webpart。这个例子应该让你开始:

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);

在您填写空白后,此代码将在您的发布页面上放置一个 WebPart。最后,当您为发布页面实例化 WebPart 管理器时,最重要的功能是 SPLimitedWebPartManager.ImportWebPartSPLimitedWebPartManager.AddWebPart

【讨论】:

【参考方案2】:

好的,做了一点挖掘......这是我的解决方案。

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);
          
    

【讨论】:

以上是关于以编程方式创建包含 Web 部件的 Web 部件页面的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sharepoint 的 c# 非可视 Web 部件中以编程方式创建进度更新控件

以编程方式在 WSS 3.0 的 Web 部件页面中插入列表作为 Web 部件

以编程方式枚举发布页面布局的 Web 部件区域

如何在 Sharepoint 2010 Web 部件页中正确更新站点图标

如果 Kentico 宏不包含 Web 部件,则隐藏小部件区域/Web 部件区域

将内容编辑器 Web 部件添加到 sharepoint 2010 用户控件