UI, editors, and shell breaking changes
Breaking changes to platform navigation, editor descriptors, TinyMce, shell modules, menu system, DAM integration, and admin UI in CMS 13.
This article covers CMS UI, editor descriptor, TinyMce, shell module, navigation menu, DAM integration, and admin area breaking changes in CMS 13.
Platform navigation
TagHelpers replace the HtmlHelper-based platform navigation.
-
EPiServer.Shell.Navigation.MenuHelper.CreatePlatformNavigationMenu– Converted from an HtmlHelper to a TagHelper. To render platform navigation on a custom view, use:<platform-navigation />Page content needs its height adjusted by another tag helper:
<platform-navigation-wrapper>CONTENT</platform-navigation-wrapper> -
EPiServer.Shell.Navigation.MenuHelper– The following methods were removed:LocalMenu,ShellMenu,EnsureValidMenuPath,CalculatePathDepth,CreatePlatformNavigationMenu,ApplyPlatformNavigation,CreateLocalMenu. Refer toPlatformNavigationTagHelperinstead. -
EPiServer.Shell.Navigation.MenuHelper– FieldGlobalHeaderOptionswas removed. Update options through the service container.
Shell module changes
-
EPiServer.Shell.ShellInitialization– No longer implementsIConfigurableModule. Services are now registered using theAddCmsShell()service registration method. -
EPiServer.Shell.UI.InitializationModule– No longer implementsIConfigurableModule. Services are now registered using theAddCmsShellUI()service registration method. MethodPreloadwas removed. -
EPiServer.Shell.Modules.ShellModule– Previous constructors were removed. Only the default constructor is now exposed. PropertiesName,RouteBasePath,ResourceBasePathand other dependencies are assigned through property injection byIModuleFinder. Classes inheritingShellModulecan no longer use these properties in their constructor. They can now inject service dependencies instead. Previously obsoleted methodResolveClientPathwas removed. -
EPiServer.Shell.Modules.ShellModuleItem– FieldDependencieswas converted into a property and changed to typeIList<AssemblyItem>. -
EPiServer.Shell.Modules.AssemblyItem– FieldDependencieswas converted into a property and changed to typeIList<AssemblyItem>. -
EPiServer.Shell.Modules.ModuleRouteConstants– FieldRouteControllerchanged from a static field to aconst. -
EPiServer.Shell.ShellModuleStaticFilesRegistration– Field_modulesPathwas incorrectly made public and is now private as intended. -
EPiServer.Shell.Modules.IContentExtensions– MethodPreviewUrlwas removed. MethodThumbnailUrlwas removed. ParametertemplateResolverwas removed from methodGetIcon.
Editor descriptors
Multiple editor descriptors had their constructors changed. The common pattern is:
- Overloaded constructors were removed.
- Constructor argument changed from
IEnumerable<IContentRepositoryDescriptor>toIContentRepositoryDescriptorRegistry. - New constructor parameters
IApplicationResolverandServiceAccessor<SystemDefinition>were added.
Affected editor descriptors:
EPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.ContentReferenceEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.ContentReferenceListEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.UrlEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.ImageUrlEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.MediaUrlEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.VideoUrlEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.LinkCollectionEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.LinkItemEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.PageReferenceListEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.ContentAreaEditorDescriptorEPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.ItemCollectionEditorDescriptor
Selection factories
EPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.SelectionFactories.PageTypeSelectionFactory– New constructor parameterLocalizationService.EPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.SelectionFactories.PropertySelectionFactory– New constructor parametersIContentTypeRepositoryandLocalizationService.
ClientEditorAttribute
EPiServer.Shell.ObjectEditing.ClientEditorAttribute– Now requires a stricter format for theEditorConfigurationfield due to the switch to System.Text.Json. JSON object property names (RFC 8259) must be double-quoted strings. Single quotes or unquoted keys are invalid.
Removed editor types
EPiServer.Shell.ObjectEditing.EditorDescriptors.TextareaEditorDescriptor– Previously obsoleted class was removed.EPiServer.Shell.ObjectEditing.ExtendedMetadata– Previously obsoleted propertyDefaultValuewas removed.
TinyMce
-
EPiServer.Cms.TinyMce.Core– MethodAddSettingsTransformthrows an exception whennameof the transform is null or empty. There is a new overload ofAddSettingsTransformthat accepts only a delegate and uses a generated name for the transform. -
EPiServer.Cms.TinyMce.ServiceCollectionExtensions– Extension methodsAddTinyMce()andDisableEditorValidation()moved toEPiServer.DependencyInjectionnamespace. -
EPiServer.Cms.TinyMce.SpellChecker.ServiceCollectionExtensions– Extension methodAddTinyMceSpellChecker()moved toEPiServer.DependencyInjectionnamespace.
Search providers
-
EPiServer.Cms.Shell.Search.ContentSearchProviderBase<TContentData, TContentType>– ParametertemplateResolverwas removed fromContentSearchProviderBase. FieldsContentTypeRepository,LanguageResolver, andEditPathwere converted to properties. Constructor argument changed fromISiteDefinitionResolvertoIApplicationResolver. -
EPiServer.Shell.Search.SearchProvidersManager– Constructor takes a list ofISearchProviderSourceinstead ofISearchProvider.SearchProvidersManageris now internal. Use theISearchProvidersManagerabstraction instead. -
EPiServer.Shell.UI.Rest.SearchResultStore– Made internal.
Menu and navigation system
-
EPiServer.Shell.Navigation.MenuAssembler– Now internal. To register a customMenuItem, implement eitherIMenuProviderorIAsyncMenuProvider. -
EPiServer.Shell.Navigation.MenuBuilder– Removed (leftover from WebForms). -
EPiServer.Shell.Navigation.MenuItem– Removed unusedRendermethod. The whole menu is now a React component. -
EPiServer.Shell.UI.ShellMenuProvider– Removed (considered internal). Previously obsoleted propertyUserGuideUrlwas removed. -
EPiServer.Cms.UI.Settings.SettingsMenuProvider– Removed. -
EPiServer.Shell.UI.FallbackModuleController– Removed (considered internal).
REST and context services
-
EPiServer.Shell.UI.Rest.ContextStore– TheGetmethod renamed toGetAsyncand returnsTask<RestResultBase>instead ofRestResultBase. -
EPiServer.Shell.Rest.IUriContextResolver– TheTryResolveUrimethod signature changed frombool TryResolveUri(Uri uri, out ClientContextBase instance)toTask<ContextResolutionResult> TryResolveUriAsync(Uri uri, CancellationToken cancellationToken = default). -
EPiServer.Shell.Rest.IUrlContextResolver– TheTryResolveUrlmethod signature changed frombool TryResolveUrl(Uri url, out ClientContextBase instance)toTask<ContextResolutionResult> TryResolveUrlAsync(Uri url, CancellationToken cancellationToken = default). -
EPiServer.Cms.Shell.UI.Rest.ContentQuery– Removed constructors that do not acceptUserInterfaceOptions,ContentTypeResolver, andIHasChildrenEvaluatorarguments. -
EPiServer.Cms.Shell.UI.Rest.GetPagedChildrenQuery– Constructor accepts a new argumentIEnumerable<IHasChildrenEvaluator> hasChildrenEvaluators. -
EPiServer.Cms.Shell.UI.Rest.IContentChangeManager– Interface aligned withContentChangeManager. -
EPiServer.Cms.Shell.UI.Rest.ContentChangeManager– Implementation moved to internal namespace since there is an interfaceIContentChangeManager.
Removed REST types
EPiServer.Shell.Services.Rest.RestResult– Previously obsoleted propertyStatusCodeand constructor were removed.EPiServer.Shell.Services.Rest.RestResultBase– Previously obsoleted propertySafeResponseand constructor were removed.EPiServer.Shell.Services.Rest.RestStatusCodeResult– Previously obsoleted constructor was removed.
Admin UI
-
EPiServer.Cms.UI.Admin.SectionsVisibility–PluginManagerhas been defaulted tofalse. -
EPiServer.Cms.UI.Admin.AdminModule– New constructor parameterIContentIndexerProvider. -
EPiServer.Cms.UI.Admin.ServiceCollectionExtensions– Extension methodAddAdmin()moved toEPiServer.DependencyInjectionnamespace.
CMS Shell
-
EPiServer.Cms.Shell.ServiceCollectionExtensions– Extension methodsAddCmsUI()andAddAdminUserRegistration()moved toEPiServer.DependencyInjectionnamespace. -
EPiServer.Cms.Shell.SiteConfigurationRepositoryExtensions– Obsoleted class removed. -
EPiServer.Cms.Shell.Extensions.SettingsExtensions– Previously obsoleted class removed. -
EPiServer.Cms.Shell.LinkableTypesAssembler– Changed constructor argument fromIEnumerable<IContentRepositoryDescriptor>toIContentRepositoryDescriptorRegistry. -
EPiServer.Cms.Shell.CmsModule– One constructor removed, another simplified with unused parameters removed.
DAM integration
EPiServer.Cms.DamIntegration.UI.PropertyAttributeTagHelper– Can now render DAM assets with normal<img>,<video>,<a>tags when value contains a DAM assetContentReference. CMS 12 used a TagHelper with a<dam-asset>tag to render DAM assets. DAM HtmlHelpers ported from CMS 12 inDamHtmlHelpersare obsolete.- DAM integration C# packages and NuGet references have moved from the
EPiServernamespace to theOptimizelynamespace. Update anyusingstatements or package references fromEPiServer.Cms.DamIntegrationtoOptimizely.Cms.DamIntegrationaccordingly.
Visitor Groups UI
EPiServer.Cms.UI.VisitorGroups.Api.ModelBinding.VisitorGroupContractResolver– Removed.
UI culture behavior
EPiServer.Cms.Shell.UI.Profile.CurrentUiCulture– UI language determination behavior changed whenUICultureLanguageCode=autoorUseBrowserLanguagePreferences=true. The system now correctly reads the browser's language preference instead of defaulting to English. If no valid browser language is found, it falls back to English. Sites relying on the previous behavior whereUICultureLanguageCode=autodid not apply browser language preferences may need to update their globalization configuration.
Other removed types
EPiServer.Shell.IUIDescriptorInitializer– Previously obsoleted interface removed.EPiServer.Shell.Composition.IContainer– Previously obsoleted interface removed.EPiServer.Shell.Web.Mvc.BootstrapperViewModel– Previously obsoleted propertiesGlobalNavigationMenuTypeandUseContainersremoved.EPiServer.Shell.Web.Mvc.DojoResourceResult– Previously obsoleted constructor removed.EPiServer.Shell.Web.Mvc.JsonDataResult– Previously obsoleted constructors, propertySerializer, and methodWriteDataToResponseremoved.EPiServer.Shell.Web.Mvc.JsonExtensions– Class removed after the only methodJsonDatawas removed.EPiServer.Shell.Web.Mvc.WrappedJsonDataResults– Previously obsoleted constructor removed.EPiServer.Shell.UIDescriptor– Previously obsoleted propertiesContainerTypeIdentifierandMainWidgetTyperemoved.EPiServer.Shell.Web.GlobalNavigationMenuType– Previously obsoleted enum removed.EPiServer.Shell.Web.ICustomGlobalNavigationMenuBehavior– Previously obsoleted interface removed.EPiServer.Web.Mvc.Html.QuickNavigatorHtmlHelperExtensions– Previously obsoleted methodRenderEPiServerQuickNavigatorremoved.EPiServer.Shell.Security– Previously obsoleted synchronous methods inUIRoleProvider,UISignInManager,UIUserManager, andUIUserProviderremoved.
CMS controllers
Controllers that inherit EPiServer.Cms.Shell.UI.Controllers.Internal.BaseController or EPiServer.Shell.Services.Rest.RestControllerBase and reside in Internal namespaces have changed access modifier from public to internal.
ContentDataStoreModel access changes
EPiServer.Cms.Shell.UI.Rest.Internal.ContentDataStoreModel and related model classes have changed from public to internal. Since REST controllers in EPiServer.Cms.Shell.UI are now internal, the models used by those controllers are also internal. Code that directly references these public model classes must be updated to use supported public APIs instead.
Removed shared views and JavaScript
- Removed
/CmsUIViews/Views/Shared/_Sleek.cshtml– This shared view was merged with/CmsUIViews/Views/Bootstrapper/Bootstrapper.cshtml. - Removed
epi.resourcesJavaScript object – Load resources directly via"epi/i18n!epi/shell/ui/nls/episerver.shared"in the dependency list ofdefine.
Removed editor descriptors and helpers
-
EPiServer.Cms.Shell.PageInfoHelper– Class removed. Was previously obsoleted. -
EPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.PropertyValueList.PropertyValueListEditorDescriptor<T>– Abstract base class removed, along with all concrete implementations:PropertyDateTimeListEditorDescriptor,PropertyDoubleListEditorDescriptor,PropertyIntListEditorDescriptor, andPropertyStringListEditorDescriptor. Logic has been moved toPropertyCollectionMetadataExtender. -
EPiServer.Cms.Shell.UI.ObjectEditing.EditorDescriptors.ImageReferenceEditorDescriptor– Parameterless constructor (usingServiceLocator) removed. Use the constructor with an explicitFileExtensionsResolverdependency. -
EPiServer.Cms.Shell.UI.Rest.Models.PatchContentDataModel– PropertiesForceCurrentandPublishChangesremoved. Use theActionproperty instead. -
EPiServer.UI.Shell.UiWrapperType– ConstantInlineremoved. UseContentEditableinstead.
EPiServer.Cms.AspNetCore.HtmlHelpers
-
EPiServer.Web.Mvc.Html.PageHtmlHelperExtensions– ThreePageLinkoverloads acceptingIContentRepositorywere removed. UseHtml.ContentLinkinstead. -
EPiServer.Web.Mvc.Html.PropertyExtensions– Static propertyCustomSettingsAttributeWriterremoved. UsePropertyRenderer.CustomSettingsAttributeWriterinstead. -
EPiServer.Web.Mvc.Html.ContentAreaRenderer– Protected methodResolveTemplate(IHtmlHelper, ...)removed. UseResolveContentTemplateinstead. Protected methodIsInEditMode(IHtmlHelper)removed. UseIsInEditMode()without parameters instead. -
EPiServer.Web.Mvc.PartialRequest– Class removed. UseIContentRendererto render content items, orHtml.RenderPartial/Html.RenderPartialAsyncto render partial views.
EPiServer.Cms.AspNetCore.Templating
-
EPiServer.Editor.PageEditing– PropertyPageIsInEditModewas removed. ConstantDataEPiUseMvcwas removed. -
EPiServer.Framework.Web.TemplateTypeCategories– WebForms-related enum values removed:WebFormsPage,ServerControl, andWebFormsPartial. The composite valueRequestretains its numeric value for binary compatibility. -
EPiServer.Framework.DataAnnotations.TemplateDescriptorAttribute– PropertyDefaultremoved. It is no longer possible to register a template as default. -
EPiServer.Web.RenderSettings– ConstantsCustomTagandChildrenCustomTagremoved. UseCustomTagNameandChildrenCustomTagNameinstead. -
EPiServer.Web.TemplateResolverExtensions– All 8 obsolete extension methods removed:ResolveMvcTemplate(4 overloads) – UseResolveTemplate()instead.ResolvePageTemplate(4 overloads) – UseResolveRequestTemplates()instead.
-
EPiServer.VisitorGroupsCriteriaPack.DisplayChannelModel– ParametercurrentGroupwas removed from methodValidate(VisitorGroup currentGroup). -
EPiServer.Web.EditContainer– ParameteruseMvcwas removed from its constructor.
EPiServer.Cms.AspNetCore
-
EPiServer.Web.MediaOptions– TheDefaultContentTypefield was changed to a property. -
EPiServer.VisitorGroupsCriteriaPack.EventCriterion– The_currentTimeProviderfield was removed. -
EPiServer.Personalization.VisitorGroups.SessionStartCookieCriterionBase– The protected_validCookieKeyfield was replaced withValidCookieKeyproperty.
EPiServer.Cms.AspNetCore.Mvc
EPiServer.Web.Mvc.BlockController– Obsolete class removed.EPiServer.Web.Mvc.ContentAreaContext– Obsolete class removed.EPiServer.Web.Mvc.ContentContext– Obsolete class removed.EPiServer.Web.Mvc.PartialContentController– Obsolete class removed.
EPiServer.UI
EPiServer.UI.Edit.ImageEditor.ImageSaveEvents– FieldOnImageSaveconverted into a property.
ValidateAntiForgeryReleaseToken
- Removed unintentionally exposed internal attribute. Replace with
Microsoft.AspNetCore.Mvc.ValidateAntiForgeryTokenAttribute.
AcceptAntiforgeryTokenFromQueryAttribute
EPiServer.Cms.Shell.UI.Attributes.AcceptAntiforgeryTokenFromQueryAttribute- Removed. Controllers decorated with this attribute must be rewritten to handle tokens passed via header instead.
Updated 1 day ago
