A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More


May 7, 2009
  4588
(0 votes)

Page Provider – Part three

Mapping your data to properties on the episerverpage is a fairly simple process. In the GetLocalPage method we simple use the SetValue on our created PageData object.

The standard page has two properties called MainBody and  SecondaryBody so let’s set some values on those properties.

protected override EPiServer.Core.PageData GetLocalPage(EPiServer.Core.PageReference pageLink, EPiServer.Core.ILanguageSelector languageSelector)
{
    PageData pageData = new PageData();
 
    Development.DataAbstraction.SimplePage activeSimplePage = GetSimplePage(pageLink);
    
    // Finds the parent to our page.
    PageReference parentLink = (pageLink.ID == parentPage.ID) ? base.EntryPoint : base.ConstructPageReference(parentPage.ID);
 
    base.InitializePageData(
        pageData, 
        activeSimplePage.Name, 
        standardPageType.Name, 
        activeSimplePage.Guid, 
        pageLink, 
        parentLink, 
        new List<string>() {}
        );
 
    pageData.SetValue("MainBody", "Some text");
    pageData.SetValue("SecondaryBody", "Some other text");
 
    return pageData;
}

01

This works well for simple string based properties  (both MainBody and SecondaryBody are of type xhtml string). So let’s try to work with a more complex property type, for instance the link collection. To do this we start with adding a property of that type called Links to our standard page page type.

To get a feel for how this works let’s start with just setting the property to some string value and see what happens.

   1: pageData.SetValue("Links", "Link1");

This leads to the exception System.ArgumentException: Passed object must be of type LinkItemCollection. So apparently we need to create a LinkItemCollection and map it to the property data.

EPiServer.SpecializedProperties.LinkItemCollection links = new EPiServer.SpecializedProperties.LinkItemCollection();
 
EPiServer.SpecializedProperties.LinkItem linkItem = new EPiServer.SpecializedProperties.LinkItem();
linkItem.Href = "http://www.aftonbladet.se";
linkItem.Text = "Aftonbladet";
 
links.Add(linkItem);
 
linkItem = new EPiServer.SpecializedProperties.LinkItem();
linkItem.Href = "http://www.idg.se";
linkItem.Text = "IDG";
 
links.Add(linkItem);
 
pageData.SetValue("Links", links);

02

This is a somewhat unlikely scenario (to create the links programmatically that is). A more likely task is that the customer wants to add additional info to their data. Say for instance that the customer wants to add some links to their products that they for some reason don’t want or are unable to store in their product database.

What we’d do then is to give the page provider the capabilities to edit the page and when the user saves the page we save the property value of the link collection to some repository and then build logic to fetch the same data on the loading of the page (GetLocalPage).

This is what we’ll explore in the next post.

May 07, 2009

Comments

Please login to comment.
Latest blogs
A day in the life of an Optimizely OMVP: Learning Optimizely Just Got Easier: Introducing the Optimizely Learning Centre

On the back of my last post about the Opti Graph Learning Centre, I am now happy to announce a revamped interactive learning platform that makes...

Graham Carr | Jan 31, 2026

Scheduled job for deleting content types and all related content

In my previous blog post which was about getting an overview of your sites content https://world.optimizely.com/blogs/Per-Nergard/Dates/2026/1/sche...

Per Nergård (MVP) | Jan 30, 2026

Working With Applications in Optimizely CMS 13

💡 Note:  The following content has been written based on Optimizely CMS 13 Preview 2 and may not accurately reflect the final release version. As...

Mark Stott | Jan 30, 2026

Experimentation at Speed Using Optimizely Opal and Web Experimentation

If you are working in experimentation, you will know that speed matters. The quicker you can go from idea to implementation, the faster you can...

Minesh Shah (Netcel) | Jan 30, 2026