Loading...
Area: Episerver CMS
Applies to versions: 9.0 and higher

Generic PropertyList (PropertyList<T>)

The following information is describing unsupported functionality. Using PropertyList<T> together with complex types requires additional custom functionality to fully ensure data consistency, portability and functionality. Episerver recommends using ContentArea and Blocks for lists of complex objects.

PropertyList is a property that allows you to define an editable list of objects. Content model can implement a property of type IList<T> where T is a class with property definitions.

public virtual IList<CustomItem> List{ get; set; }

Example - list of locations

This example shows how to implement a list of locations.

Generic PropertyList.png

PropertyList allows the editor to edit items using a dialog window.

Editing Generic PropertyList.png

The list contains items with string properties:

  • address list 1
  • address line 2
  • city
  • country.

First we have to define Location model class. It will represent the property item.

using System.ComponentModel.DataAnnotations;

namespace Site.Models.Pages
{
    public class Location
    {
        [Display(Name = "Address line 1")]
        public virtual string AddressLine1 { get; set; }

        [Display(Name = "Address line 2")]
        public virtual string AddressLine2 { get; set; }

        public virtual string City { get; set; }

        public virtual string Country { get; set; }
    }
}

The next step is to register the property definition. It is done using a custom property class LocationsProperty that sets the generic type to Location item class:

using EPiServer.PlugIn;

namespace Site.Models.Pages
{
    [PropertyDefinitionTypePlugIn]
    public class LocationsProperty : PropertyList<Location> { }
}

Finally we can add list of locations on the page:

using System.ComponentModel.DataAnnotations;
using EPiServer.Core;
using EPiServer.DataAnnotations;
using EPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors;
using EPiServer.Shell.ObjectEditing;
using System.Collections.Generic;

namespace Site.Models.Pages
{
    /// <summary>
    /// Page with PropertyListDefinition
    /// </summary>
    [ContentType(GUID = "2CDDC73C-83AC-4F35-BA9D-50F285723A96")]
    public class TestPage : PageData
    {
        [Display(Name = "List of locations")]
        [EditorDescriptor(EditorDescriptorType = typeof(CollectionEditorDescriptor<Location>))]
        public virtual IList<Location> Locations { get; set; }
    }
}

Localizing item properties

List item properties can be translated in a similar way as Content properties translation. Properties can be translated using DisplayAttribute and language files. More information about localized texts can be found here.

Last updated: Feb 04, 2019

Feedback?