PropertyXhtmlString and WebParts
I get a lot of questions concerning WebParts used with EPiServer. The most common question is how to use the PropertyXhtmlString and text editor (TinyMCE) in a WebPart. I'll provide examples using both WebControl and UserControl.
WebControl
public class EditorPart : PropertyDataWebPartBase
{
[Personalizable, IsRequired]
public SerializablePropertyXhtmlString MainBody { get; set; }
public EditorPart()
{
MainBody = new SerializablePropertyXhtmlString {
EditorToolOptions = EditorToolOption.All ^ EditorToolOption.Font
};
}
protected override void OnPreRender(EventArgs e)
{
var propertyControl = MainBody.CreatePropertyControl();
propertyControl.PropertyData =
new PropertyXhtmlString(MainBody.Value as string);
Controls.Add(propertyControl as Control);
}
}
UserControl
The .ascx file simply contains a PlaceHolder
<asp:PlaceHolder runat="server" ID="uxEditor" />
And the code behind is very similar to the WebControl
public partial class UCEditorPart : UserControlWebPartBase
{
[Personalizable, IsRequired]
public SerializablePropertyXhtmlString MainBody { get; set; }
public UCEditorPart()
{
MainBody = new SerializablePropertyXhtmlString {
EditorToolOptions = EditorToolOption.All ^ EditorToolOption.Font };
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
var propertyControl = MainBody.CreatePropertyControl();
propertyControl.PropertyData =
new PropertyXhtmlString(MainBody.Value as string);
uxEditor.Controls.Add(propertyControl as Control);
}
}
For both approaches you'll need the SerializablePropertyXhtmlString
[Serializable]
public class SerializablePropertyXhtmlString : PropertyLongString
{
private EditorToolOption _editorToolOptions;
public override IPropertyControl CreatePropertyControl()
{
return new PropertyXhtmlStringControl();
}
public override EPiServer.Editor.EditorToolOption EditorToolOptions
{
get
{
if (PrincipalInfo.Current.IsPermitted(Permission.EditorUnlimitedFunctions))
{
return EditorToolOption.All;
}
return _editorToolOptions;
}
set
{
base.ThrowIfReadOnly();
_editorToolOptions = value;
}
}
public override object Value
{
get
{
var prop = new PropertyXhtmlString(base.Value as string);
return prop.ToString();
}
set
{
var prop = new PropertyXhtmlString(value as string);
base.Value = prop.Value;
}
}
}
I hope this was helpful. The source is also downloadable.