Resolve the currently loaded content context
1 min
To resolve the current loaded content context, get an instance of CurrentContentContext object. You should run any custom logic in any of the Content Events:
[ModuleDependency(typeof (EPiServer.Shell.UI.InitializationModule))]
public class CustomModule: IConfigurableModule {
public void Initialize(InitializationEngine context) {
context.Locate.ContentEvents().CreatedContent += CreatedContent;
context.Locate.ContentEvents().CreatingContent += CreatingContent;
}
private void CreatingContent(object sender, ContentEventArgs e) {
var currentContentContext = ServiceLocator.Current.GetInstance<CurrentContentContext>();
// we know which content context initiated the CREATE operation
var currentContentLink = currentContentContext.ContentLink;
var newlyCreatedContentLink = e.ContentLink; // --> null as at this point the ContentReference was not assigned yet
}
private void CreatedContent(object sender, ContentEventArgs e) {
var newlyCreatedContentLink = e.ContentLink; // this is the ContentReference of the newly created content item
// but we might need the ContentReference of the content that was being viewed when the CREATE operation was run
var currentContentContext = ServiceLocator.Current.GetInstance<CurrentContentContext>();
// this gives us the content context the editor was in
var currentContentLink = currentContentContext.ContentLink;
}
public void Uninitialize(InitializationEngine context) {
context.Locate.ContentEvents().CreatedContent -= CreatedContent;
context.Locate.ContentEvents().CreatingContent -= CreatingContent;
}
public void ConfigureContainer(ServiceConfigurationContext context) {
}
}It also might be useful to know the current content context in any metadata-aware component, such asĀ an EditorDescriptor, for example.
public class FooPageType: PageData {
[EditorDescriptor(EditorDescriptorType = typeof (CollectionEditorDescriptor<OfferDetailsItem>))]
public virtual IList<OfferDetailsItem> OfferDetailsItems {
get;
set;
}
}
public class OfferDetailsItem {
[Display(Order = 1)]
[UIHint("test")]
public string Label {
get;
set;
}
}
[PropertyDefinitionTypePlugIn]
public class OfferDetailsItemPropertyList: PropertyList<OfferDetailsItem> {}
[EditorDescriptorRegistration(TargetType = typeof (string), UIHint = "test")]
public class CustomXhtmlDescriptor: StringEditorDescriptor {
private readonly CurrentContentContext _currentContent;
public CustomXhtmlDescriptor(CurrentContentContext currentContent) {
_currentContent = currentContent;
}
public override void ModifyMetadata(ExtendedMetadata metadata, IEnumerable<Attribute> attributes) {
base.ModifyMetadata(metadata, attributes);
var ownerContent = metadata.FindOwnerContent(); // --> will return null because the object we annotate is not ContentData but simple POCO
var currentContent = _currentContent.ContentLink; // --> will return correct page id
}
}Related blog posts