Umbraco property storage cheat sheet

Was it a comma separated list or a JSON array? When using the Content Service, it can be really useful to know what format to store data in.

, by Joe Glombek

Umbraco.MultiUrlPicker

Still an array, even in single mode.

Stored in SQL textValue column.

[
  {
    "name": "Link title",
    "udi": "umb://document/bb6ca0ea21334bc6b345afd7c703b965"
  },
  {
    "name": "Link title",
    "url": "https://example.com",
    "queryString": "#with-anchor"
  }
]

The above is prettified for legibility. The value in Umbraco will have no spaces or new lines.

How to programmatically update a Multi Url Picker This does not work.

Umbraco.MultiNodeTreePicker

Stored in SQL textValue column.

umb://document/bb6ca0ea21334bc6b345afd7c703b965,umb://document/e3d3e3b32d484424815286d4042a80a4

How to programmatically update a "Content Picker"/Multi-node tree picker

Umbraco.ContentPicker

Stored in SQL varcharValue column.

umb://document/bb6ca0ea21334bc6b345afd7c703b965

How to programmatically update a "Document Picker"/Umbraco.ContentPicker

Umbraco.RadioButtonList

Stored in SQL varcharValue column.

One

How to programmatically update a Radio Button List

Umbraco.CheckBoxList

Stored in SQL varcharValue column.

["One","Two"]

How to programmatically update a Checkbox List

Umbraco.TrueFalse

Stored in SQL intValue column.

0

How to programmatically update a Toggle/True-False/checkbox

Umbraco.Tags

Stored in SQL varcharValue column.

["Tag1","Tag2"]

How to programmatically update tags

Umbraco.DateTime

Stored in SQL dateValue column.

2023-03-15 16:20:00

(Time value is 00:00:00 if time is excluded)

How to programmatically update a DateTime

Umbraco.MemberPicker

Stored in SQL varcharValue column.

umb://member/efe1f9fb4a1b460895e70f839ba114d6

How to programmatically update a Member picker

Umbraco.UserPicker

Stored in SQL intValue column.

-1

How to programmatically update a User picker

Umbraco.MultipleTextstring (AKA Repeatable textstrings)

Stored in SQL textValue column.

One
Two
Three

How to programmatically update repeatable textstrings

Umbraco.UploadField (AKA File upload)

Stored in SQL varcharValue column.

/media/inshb1yh/callum-au.png

How to programmatically update an Upload Field. Note: This example is inconsistent with the default behaviour. It uploads the file to the Media library, unlike how File Uploads work via the UI.

Umbraco.ImageCropper

Stored in SQL textValue column.

{"src":"/media/nojjl5no/callum-au.png"}

How to programmatically update an Image Cropper field.

Umbraco.MediaPicker3

Stored in SQL textValue column.

[
  {
    "key": "22ff8e5b-062d-43ac-8aec-fb09ac2277ba",
    "mediaKey": "c63dc11a-4825-488b-8646-36211b812f3b"
  }
]

The above is prettified for legibility. The value in Umbraco will have no spaces or new lines.

How to programmatically update a media picker This looks incorrect.

Umbraco.MediaPicker (legacy AKA v2)

Stored in SQL textValue column.

umb://media/c63dc11a4825488b864636211b812f3b

How to programmatically update a legacy media picker

Umbraco.BlockList

Stored in SQL textValue column.

{
  "layout": {
    "Umbraco.BlockList": [
      {
        "contentUdi": "umb://element/2515bbf8470c43a1bda132d643a4a418"
      },
      {
        "contentUdi": "umb://element/05c3c37d6a814f7a9ac67be3d01dd057"
      }
    ]
  },
  "contentData": [
    {
      "contentTypeKey": "ec586638-a55d-463a-b36e-62ed11e2b2df",
      "udi": "umb://element/2515bbf8470c43a1bda132d643a4a418",
      "property1": "Value"
    },
    {
      "contentTypeKey": "ec586638-a55d-463a-b36e-62ed11e2b2df",
      "udi": "umb://element/05c3c37d6a814f7a9ac67be3d01dd057",
      "property1": "Value"
    }
  ],
  "settingsData": []
}

The documentation does not currently document how to programmatically update a block list. See block grid for inspiration or read Nathaniel Nunes' 24 Days in Umbraco article on Importing Block List Items Programmatically in Umbraco 17

Umbraco.BlockList (single mode)

Exactly the same as non-single mode (but with only one item!)

Stored in SQL textValue column.

{
  "layout": {
    "Umbraco.BlockList": [
      {
        "contentUdi": "umb://element/9ae5d1abe0a84b80a4ace9ae8ab1311b"
      }
    ]
  },
  "contentData": [
    {
      "contentTypeKey": "ec586638-a55d-463a-b36e-62ed11e2b2df",
      "udi": "umb://element/9ae5d1abe0a84b80a4ace9ae8ab1311b",
      "property1": "Value"
    }
  ],
  "settingsData": []
}

The above is prettified for legibility. The value in Umbraco will have no spaces or new lines.

The documentation does not currently document how to programmatically update a block list. See block grid for inspiration.

Umbraco.BlockGrid

Stored in SQL textValue column.

{
  "layout": {
    "Umbraco.BlockGrid": [
      {
        "contentUdi": "umb://element/df08225d94af450a98500b35d4b0e3d4",
        "areas": [],
        "columnSpan": 12,
        "rowSpan": 1
      },
      {
        "contentUdi": "umb://element/e373cf3ef53447f5858941a8640db5b4",
        "areas": [
          {
            "key": "2b314d42-64f8-4608-897b-0b55b449427c",
            "items": [
              {
                "contentUdi": "umb://element/81e9a611a5c84d929d1bb8d5026fc607",
                "areas": [],
                "columnSpan": 6,
                "rowSpan": 1
              }
            ]
          },
          {
            "key": "223adcd7-7e4d-4b95-9c6b-eb2047a01607",
            "items": [
              {
                "contentUdi": "umb://element/bb441112ad794756a542ac1cd7fc4477",
                "areas": [],
                "columnSpan": 6,
                "rowSpan": 1
              }
            ]
          }
        ],
        "columnSpan": 12,
        "rowSpan": 1
      }
    ]
  },
  "contentData": [
    {
      "contentTypeKey": "df88b972-6ba5-4da8-a966-036137a935ad",
      "udi": "umb://element/df08225d94af450a98500b35d4b0e3d4",
      "headline": "Value"
    },
    {
      "contentTypeKey": "cb50a504-b8cd-4262-8344-bddfddc09282",
      "udi": "umb://element/e373cf3ef53447f5858941a8640db5b4"
    },
    {
      "contentTypeKey": "df88b972-6ba5-4da8-a966-036137a935ad",
      "udi": "umb://element/81e9a611a5c84d929d1bb8d5026fc607",
      "headline": "Column 1"
    },
    {
      "contentTypeKey": "df88b972-6ba5-4da8-a966-036137a935ad",
      "udi": "umb://element/bb441112ad794756a542ac1cd7fc4477",
      "headline": "Column 2"
    }
  ],
  "settingsData": []
}

The above is prettified for legibility. The value in Umbraco will have no spaces or new lines.

How to programmatically update a block grid

Umbraco.RichText (including RTE blocks)

Stored in SQL textValue column.

Versions before v13 stored the markup as a string. With the introduction of blocks in the RTE the structure changed to JSON, with the markup stored in the markup property. The rest of the properties relate to blocks referenced in the markup.

{
  "markup": "\u003Cp\u003E\u003Cumb-rte-block-inline data-content-key=\u0022fd41689d-5c48-47a3-91cb-a702e34f2716\u0022\u003E\u003C/umb-rte-block-inline\u003E\u003C/p\u003E",
  "blocks": {
    "contentData": [
      {
        "contentTypeKey": "6d09c413-9063-4ab2-bd6e-eea970903528",
        "udi": null,
        "key": "fd41689d-5c48-47a3-91cb-a702e34f2716",
        "values": [
          {
            "editorAlias": "Umbraco.MultiNodeTreePicker",
            "culture": null,
            "segment": null,
            "alias": "contactUsPage",
            "value": "umb://document/14e766739b714259aac3fc9507eb3bdb"
          }
        ]
      }
    ],
    "settingsData": [],
    "expose": [
      {
        "contentKey": "fd41689d-5c48-47a3-91cb-a702e34f2716",
        "culture": null,
        "segment": null
      }
    ],
    "Layout": {
      "Umbraco.RichText": [
        {
          "contentUdi": null,
          "settingsUdi": null,
          "contentKey": "fd41689d-5c48-47a3-91cb-a702e34f2716",
          "settingsKey": null
        }
      ]
    }
  }
}

The above is prettified for legibility. The value in Umbraco will have no spaces or new lines.

The docs guide on How to programmatically update a Rich Text Editor is currently out of date. Take inspiration from the Block Grid docs or my post on Migrating RTE Macros.

I'm not sure what the expose section does, but it may not be necessary?