The basics of an EPiServer property
You can view an EPiServer property as consisting of two things: property data and property controls.
The property data is contained within a PropertyData object which contains the value of the property.
The PropertyData object also contains logic for loading property controls to edit or view the property.
Relationship between PropertyData and PropertyControl
Let’s say we have a property called “MainBody” which we use to store the main HTML content for a standard page.
This property will be of type PropertyXhtmlString (that’s our PropertyData type). When the property control for this property is requested the property data object will return a control suitable for the current context.
For example, we may have the following on our page template:
<EPiServer:Property PropertyName="MainBody" runat="server" />
When the page is viewed the PropertyXhtmlString object will load the default controls for rendering the property value, which is an XHTML string (note that this is pseudo code):
// Load default controls for displaying the property value on a page
return new Literal { Text = Value };
When the page is edited the PropertyXhtmlString object will instead load the edit controls for editing the property value:
// Load edit controls for editing the property value
return new TextBox { Text = Value };
Properties supporting direct on-page edit will also have a third property control which is rendered in DOPE mode. Note that DOPE is only supported in Internet Explorer. It’s accessible through the right-click menu when viewing a page:
So, to sum up: a PropertyData object is responsible for storing the property value and to render Default, Edit, and OnPageEdit controls for displaying or editing the property value:
Implement your own custom properties in EPiServer
This post was written as an introduction to a post on how to implement custom properties in EPiServer and how to use user controls for rendering the different property controls.
Update: Also check out these posts by Joel Abrahamsson on creating a custom EPiServer property, and how to implement a custom property in EPiServer using a custom class as the value type.