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

Generic PropertyList (PropertyList<T>)

Note: This topic describes unsupported functionality in Episerver CMS. Episerver recommends using ContentArea and Blocks for lists of complex objects. Using PropertyList<T> together with complex types requires additional custom functionality to fully ensure data consistency, portability and functionality. This includes, but is not limited to UI, Settings, Export/Import, Permanent link handling and default values.

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.

Do you find this information helpful? Please log in to provide feedback.

Last updated: Feb 04, 2019