EPiPattern: DO & DONT with EPiServer Properties

This might be obvious stuff for most seasoned EPiServer developers but I still think it is worth blogging about because I see these dangerous mistakes whenever I do a code review of an EPiServer project.

Null values

Remember that all EPiServer properties with an empty value never are stored in the database. If you access it from code, it will always be null – not an empty string, 0 or false as you maybe expected.

Why null? It is by design and is very convenient if you want to check if something is not set by an editor or does not exist on this page. You just have to compare with null regardless of data type.

Example – DO & DONT

This will throw NullReferenceException if value is empty or missing:
sb.Append(CurrentPage[“MyProperty”].ToString());

StringBuilder.Append accepts null objects so this is better:
sb.Append(CurrentPage[“MyProperty”]);

This will throw NullReferenceException if value is empty or missing:
<%= CurrentPage.Property[“MyProperty”].Value.ToString()%>

Markup will accept any type and convert to string so cast is not needed:
<%= CurrentPage [“MyProperty”] %>

Other examples with fallback

If must have a string returned use as operator and ?? operator:
string x = [“MyProperty”] as string ?? string.Empty;

And for Value Type it is written like this: (thanks Henrik)
DateTime x = (DateTime)(CurrentPage[”MyProperty”] ?? DateTime.Now);
int i = (int)(CurrentPage[”MyProperty”] ?? 0);

If you need a fallback in markup the?? Operator can be used:
<%= CurrentPage[“Heading”] ?? CurrentPage.PageName %>

Use Default indexer

Remember that there is a default indexer on PageData that returns the value, too.

Example – DO & DONT

This expression:
<%= CurrentPage.Property[“MyProperty”].Value %>

…is equivalent:
<%= CurrentPage[“MyProperty”] %>

Common EPiServer Property Names

It is very common that Page Types in EPiServer has the following properties.

Heading (string)

Used for the h1-tag of the page. If not defined the page is coded to fall back to the PageName. (See public templates for example implementation). This makes it possible to use PageName for a shorter text in menus and the meta title-tag and have a little longer text for the actual h1-header.

MainIntro (string)

This property is commonly used to describe a page in Teasers on other pages and in search results. It is usually also used to generate the meta description-tag which can affect the description external search engines like Google show.

There are functions in EPiServer that uses MainIntro – like PreviewText() method on PageTemplateContainer (type of Container object in EPiServer PageList, PageTree, etc). It implements a fallback if no MainIntro exists to strip MainBody of HTML and use first 400 characters.

MainBody (string)

Almost always used for the body text of an page in EPiServer.

Read more

Read more about Properties with Special Functionality in EPiServer.