Note
This legacy content applies to Optimizely Content Management System (CMS) versions 10 and 11.
The rendering is based on the `PropertyControl
` interface, and the `PropertyDataControl
` base class.
The `EPiServer.Web.PropertyControls
` namespace contains default controls for built-in properties. You can render properties in different ways, but rendering always implements `IPropertyControl
` in Web Forms. The property implementation returns the default control by overriding the `CreatePropertyControl
` method from `PropertyData
`.
The abstract base class `PropertyDataControl
` does a lot of the underlying work, so you do not need to inherit from any classes in this namespace when you create custom controls. However, custom controls must inherit from `System.Web.UI.Control
` and implement the `EPiServer.Core.IPropertyControl
` interface. `PropertyDataControl
` has the following more important methods and properties:
Method | Description |
[CreateDefaultControls()](🔗) | Creates child controls for view mode. |
[CreateEditControls()](🔗) | Creates child controls for edit mode. This is valid only for Web Form-based editors. |
[ApplyEditChanges()](🔗) | Saves values from your input controls to the property/properties. This is valid only for Web Forms-based editors. |
Property | Description |
[CurrentPage](🔗) | The current page for the closest parent that implements IPageSource. |
[PropertyData](🔗) | The current property for the control. |
[Properties](🔗) | Returns a `PropertyDataCollection ` with properties that are being edited. |
[RenderType](🔗) | The current RenderType. |
Note
You can use several of the methods in `
PropertyDataControl
` only when you create a Web Forms-based editor. However, in the default edit view in EPiServer 7 or later, you can use Web Forms-based editing if you configured legacy editing, or if you edit dynamic properties or dynamic content.
## Change rendering with PropertyControlBase<T>Â
If you want to change rendering of an existing property, perhaps based on a tag, `PropertyControlBase<T>
` lets you to use any user control. You also can apply the same method to a `WebControl
` by implementing the `IPropertyDataControl<T>
`Â interface. A generic implementation of `IPropertyControl
` wraps your control. The following example shows a definition that renders an alternative to `PageReference
` when you use the _Testing_ tag.
## Change rendering for a web browser
If you want to change rendering of a property based on the web browser of the current request, map a [control adapter](🔗) using a .browser-file. Because a control adapter inherits from an adapter base class, the `EPiServer.Web.PropertyControls.Adapters.PropertyDataControlAdapter
`Â base class facilitates implementation of a custom control adapter for a property. `PropertyDataControlAdapter
` implements many of the properties and methods that exist on `PropertyDataControl
` and redirects the method back to the current `PropertyDataControl
` by default, so you can implement the specific methods for which you want to change the behavior. The following example shows a control adapter that overrides the default behavior for `EPiServer.Web.PropertyControls.PropertyLongStringControl
` :
Note
You must use `
Control.Controls.Add()
` to add a child control in a control adapter. Also, CMS applies control adapters even for inherited classes, so you can apply a `PropertyDataControl
` control adapter to modify the behavior of any control that inherits from `PropertyDataControl
`.
## Map presentation of properties with PropertyControlClassFactory
Mapping a `PropertyClass
` through `PropertyControlClassFactory
` overrides which control is used. The following code shows how to map a property to use the second argument, (which is required to inherit from `Control
` and implement `IPropertyControl
`), instead of the default control:
Note
`
PropertyMappings
` are not applied recursively for child classes. This means that `PropertyXhtmlString
`still has its default `PropertyControl
` even if you map `PropertyLongString
`.