Skip to main content
Browse Documentation

Components

Created by Scott Yearsley, last modified by noellambertwork on 15 Dec 2017

Components are structures that are defined in the component editor as custom types. They can be added as field types to content types as entry-level fields or as ComposedField items. Components themselves can contain any field types except other components or ComposedField types.

Getting component data

Accessing component data from either an entry-level field or from a ComposedFieldItem instance can be done by either providing a user-defined type as a generic type parameter to specify the return type, or alternatively using the non-generic method to return a dynamic object instance.

Consider the following user-defined type that matches a component. The class has to have an empty public constructor (default in this example) and the property names need to match (case-insensitive) the field ids defined in the component.

public class MovieRole
{
    public string RoleName { get; set; }

    public string Description { get; set; }

    public Link Person { get; set; }
}

Accessing the component from an entry is done in the same way any other field data is accessed.

// Access the director field data using the generic type
MovieRole directorRole = movieEntry.Get<MovieRole>("director");

// The Person entry link can be accessed
Link director = directorRole.Person;
// Alternatively return a dynamic object
dynamic directorRole = movieEntry.Get("director");

// The Person entry link can be accessed
Link director = directorRole.Person;

The same applies when accessing a list of components:

// Access the actors field data using the generic type
List<MovieRole> actorRoles = movieEntry.Get<List<MovieRole>>("actors");

foreach(MovieRole role in actorRoles)
{
    // The Person entry id can be accessed and updated
    int actorId = role.Person.Id;
    ...
}

Setting component data

Setting field data for a Component is as simple as setting any other field data. You can either create an instance of a user-defined type, such as the MovieRole example, set an anonymous object or use Dictionary<string, object> instance.

User-defined type model

Movie directorRole = new MovieRole
{
    RoleName = "Director",
    Description = "Debut directing position for this Marvel block buster",
    Person = new Link("566779e5-3b3d-439f-aa45-957ae21f17ed")
};

movieEntry.Set("director", directorRole);

// Commit the changes
movieEntry.Save();

Anonymous type

var directorRole = new
{
    RoleName = "Director",
    Description = "Debut directing position for this Marvel block buster",
    Person = new Link("566779e5-3b3d-439f-aa45-957ae21f17ed")
};

movieEntry.Set("director", directorRole);

// Commit the changes
movieEntry.Save();

Note
Updated Component data needs to be set back as the field value using the Set() method.