Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
No one?
If I inherit the IPropertyControlFactory instead of PropertyString - I'll need to implement some methods. How should they look like?
public class RightColumnSortorder_Property : IPropertyControlFactory { public override IPropertyControl CreatePropertyControl() { return (IPropertyControl)BuildManager.CreateInstanceFromVirtualPath("~/Templates/FMV/Util/RightColumnSortorder_PropertyControl.ascx", typeof(RightColumnSortorder_PropertyControl)); } public IPropertyControl CreatePropertyControl(PropertyData propertyData) { throw new NotImplementedException(); } public bool IsRegistered<TPropertyData>() where TPropertyData : PropertyData { throw new NotImplementedException(); } public IPropertyControlFactory Register<TPropertyData>(Func<IPropertyControl> controlFactory) where TPropertyData : PropertyData { throw new NotImplementedException(); } public IPropertyControlFactory Register<TPropertyData, TPropertyControl>() where TPropertyData : PropertyData where TPropertyControl : IPropertyControl { throw new NotImplementedException(); } public IPropertyControlFactory Unregister<TPropertyData>() where TPropertyData : PropertyData { throw new NotImplementedException(); } }
I've two custom properties that are "simple". But I also have one more advanced property that overrides several methods that seems to be missing in IPropertyControlFactory like: ParseToObject(), SetDefaultValue() and so on.
Hi
You could register your property control from an IInitializableModule like:
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))] public class PropertyControlRegisterModule : IInitializableModule { public void Initialize(InitializationEngine context) { context.Locate.Advanced.GetInstance<IPropertyControlFactory>().Register<RightColumnSortorder_Property>(() => (IPropertyControl)BuildManager.CreateInstanceFromVirtualPath("~/Templates/Util/RightColumnSortorder_PropertyControl.ascx", typeof(RightColumnSortorder_PropertyControl))); } public void Uninitialize(InitializationEngine context) { } }
Adding the IInitializableModule and removing CreatePropertyControl() I was able to build the project, but my custom properties ends up as a regular textbox and a datepicker in edit-mode. So no success this far :(
[InitializableModule] [ModuleDependency(typeof(EPiServer.Web.InitializationModule))] public class PropertyControlRegisterModule : IInitializableModule { public void Initialize(InitializationEngine context) { //RightColumnSortorder_Property context.Locate.Advanced.GetInstance<IPropertyControlFactory>().Register<RightColumnSortorder_Property>(() => (IPropertyControl)BuildManager.CreateInstanceFromVirtualPath("~/Templates/Util/RightColumnSortorder_PropertyControl.ascx", typeof(RightColumnSortorder_PropertyControl))); //ArchiveDate_Property context.Locate.Advanced.GetInstance<IPropertyControlFactory>().Register<ArchiveDate_Property>(() => new ArchiveDate_PropertyControl()); } public void Uninitialize(InitializationEngine context) { } }
The RightColumnSortorder_PropertyControl.ascx looks looks like this. Implementing IPropertyControl
public partial class RightColumnSortorder_PropertyControl : UserControlBase, IPropertyControl { //... }
And the ArchiveDate_PropertyControl looks like:
public class ArchiveDate_PropertyControl : EPiServer.Web.PropertyControls.PropertyDateControl { //... }
Something else I need to add/change?
The edit mode is not rendered through WebForms but from a javascript framework. So to customize the edit experience in edit mode you would need to do something like described in
https://world.episerver.com/documentation/developer-guides/CMS/editing/Registering-a-custom-editor/
Ok, I was affraid of that. Good point about edit mode and WebForms. Thanks
How to implement IPropertyControlFactory Methods in episerver 11? Previously I can override methods inherited from PropertyString Class but now how to do it in upgraded version?
You are not supposed to implement IPropertyControlFactory, instead you register a custom factory method for your custom property. In example below (more detail is in previous post in this thread) a web control ArchiveDate_PropertyControl is registered for custom property ArchivedDate_Property
context.Locate.Advanced.GetInstance<IPropertyControlFactory>().Register<ArchiveDate_Property>(() => new ArchiveDate_PropertyControl());
According to the breaking changes for EPiServer 11:
CreatePropertyControl has been removed from PropertyData. Use IPropertyControlFactory instead to register and create controls for PropertyData types.
But how do I do this in the following code?