Creating web part page using client object model (CSOM) in SharePoint 2013 or 2010

It is common scenario to create web part page and there are many ways to do that. In this post, I will give steps to create the web part page programmatically using client object model.

First we need to ensure the target destination for the page we are creating. In this example I will create the web part page in "SitePages". We need to get the object for accessing "Site Pages". We can use code similar to code snippet mentioned below.

 var sitePageLib = web.Lists.GetByTitle("Site Pages");
 clientContext.Load(sitePageLib);
 clientContext.ExecuteQuery();

 

Here I am assuming, we already have instantiated client context , web and other required object. In case, you need more detail on how to do that, I would recommend to read this on msdn.

To create the web part page we need to create object of FileCreationInformation with required details.

Mainly we need to enter the details of Url and Content. Use "Url" to gets or sets a value that specifies the URL of the file to be added and Content for specifying the content of the file to be added.

  FileCreationInformation objFileInfo = new FileCreationInformation();
 objFileInfo.Url = "MyPage.aspx";
 
 string content = @"<%@ Page language=""C#"" MasterPageFile=""~masterurl/default.master"" Inherits=""Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=16.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"" meta:webpartpageexpansion=""full"" meta:progid=""SharePoint.WebPartPage.Document"" %>
 <%@ Register Tagprefix=""SharePoint"" Namespace=""Microsoft.SharePoint.WebControls"" Assembly=""Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"" %> 
 <%@ Register Tagprefix=""Utilities"" Namespace=""Microsoft.SharePoint.Utilities"" Assembly=""Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"" %> 
 <%@ Import Namespace=""Microsoft.SharePoint"" %> 
 <%@ Assembly Name=""Microsoft.Web.CommandUI, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"" %> 
 <%@ Register Tagprefix=""WebPartPages"" Namespace=""Microsoft.SharePoint.WebPartPages"" Assembly=""Microsoft.SharePoint, Version=16.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"" %>
 <asp:Content ContentPlaceHolderId=""PlaceHolderPageTitle"" runat=""server"">
 <SharePoint:ListItemProperty Property=""BaseName"" maxlength=""40"" runat=""server""/>
 </asp:Content>
 <asp:Content ContentPlaceHolderId=""PlaceHolderAdditionalPageHead"" runat=""server"">
 <meta name=""GENERATOR"" content=""Microsoft SharePoint"" />
 <meta name=""ProgId"" content=""SharePoint.WebPartPage.Document"" />
 <meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
 <meta name=""CollaborationServer"" content=""SharePoint Team Web Site"" />
 <SharePoint:ScriptBlock runat=""server"">
 var navBarHelpOverrideKey = ""WSSEndUser""; </SharePoint:ScriptBlock>
 <SharePoint:StyleBlock runat=""server"">
 body #s4-leftpanel {
 display:none;
 }
 .s4-ca {
 margin-left:0px;
 }</SharePoint:StyleBlock>
 </asp:Content>
 <asp:Content ContentPlaceHolderId=""PlaceHolderSearchArea"" runat=""server"">
 <SharePoint:DelegateControl runat=""server""
 ControlId=""SmallSearchInputBox""/>
 </asp:Content>
 <asp:Content ContentPlaceHolderId=""PlaceHolderPageDescription"" runat=""server"">
 <SharePoint:ProjectProperty Property=""Description"" runat=""server""/>
 </asp:Content>
 <asp:Content ContentPlaceHolderId=""PlaceHolderMain"" runat=""server"">
 <div class=""ms-hide"">
 <WebPartPages:WebPartZone runat=""server"" title=""loc:TitleBar"" id=""TitleBar"" AllowLayoutChange=""false"" AllowPersonalization=""false"" Style=""display:none;""><ZoneTemplate>
 <WebPartPages:TitleBarWebPart runat=""server"" HeaderTitle=""MyPage"" Title=""Web Part Page Title Bar"" FrameType=""None"" SuppressWebPartChrome=""False"" Description="""" 
 IsIncluded=""True"" ZoneID=""TitleBar"" PartOrder=""2"" FrameState=""Normal"" AllowRemove=""False"" AllowZoneChange=""True"" AllowMinimize=""False"" AllowConnect=""True"" 
 AllowEdit=""True"" AllowHide=""True"" IsVisible=""True"" DetailLink="""" HelpLink="""" HelpMode=""Modeless"" Dir=""Default"" PartImageSmall="""" 
 MissingAssembly=""Cannot import this Web Part."" PartImageLarge="""" IsIncludedFilter="""" ExportControlledProperties=""True"" 
 ConnectionID=""00000000-0000-0000-0000-000000000000"" ID=""g_0793ac9d_8f08_49c3_8829_46f162a4e619"" AllowClose=""False"" ChromeType=""None"" 
 ExportMode=""All"" __MarkupType=""vsattributemarkup"" __WebPartId=""{0793EC99-8F07-49C9-8823-46F162A4E614}"" WebPart=""true"" Height="""" Width=""""></WebPartPages:TitleBarWebPart>
 
 </ZoneTemplate></WebPartPages:WebPartZone>
 </div>
 <table class=""ms-core-tableNoSpace ms-webpartPage-root"" width=""100%"">
 <tr>
 <td id=""_invisibleIfEmpty"" name=""_invisibleIfEmpty"" valign=""top"" width=""100%""> 
 <WebPartPages:WebPartZone runat=""server"" Title=""loc:FullPage"" ID=""FullPage"" FrameType=""TitleBarOnly""><ZoneTemplate></ZoneTemplate></WebPartPages:WebPartZone> </td>
 </tr>
 <SharePoint:ScriptBlock runat=""server"">if(typeof(MSOLayout_MakeInvisibleIfEmpty) == ""function"") {MSOLayout_MakeInvisibleIfEmpty();}</SharePoint:ScriptBlock>
 </table>
 </asp:Content>
 ";
 
 objFileInfo.Content = System.Text.Encoding.ASCII.GetBytes(content); 
 File file = sitePageLib.RootFolder.Files.Add(objFileInfo); 
 clientContext.ExecuteQuery();

 

 

In the above code snippet, I am creating the FileCreationInformation with my page name as value in Url and Content being content of page. you can use SharePoint designer to get the content of page.

Next step is to add the file in "Site Pages" and execute the query.