Ruslan Minasian
Sep 17, 2010
  6543
(0 votes)

Use UserControl for Editing Custom Property Types

First of all, read this article by Ted Nyberg about using ETF. When I first started using EpiServer (not very long ago) I was wondering why can’t I find any examples of using UserControls in custom properties. I’m pretty sure I’m inventing my own wheel but hopefully my note will be better indexed than existing ones (I found none of them).

So, let’s create property MyPropertyString extending PropertyString.

[Serializable]
[PageDefinitionTypePlugIn]
public class MyPropertyString : PropertyString {
}

Looks like pretty useful property. Let’s add it to some PageType and ensure it’s displayed.

Then, we’ll add new Web User Control

Layout
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyPropertyStringControl.ascx.cs" Inherits="EPiServer1.MyPropertyStringControl" %>
<asp:TextBox runat="server" ID="txtValue"  />&nbsp;
<input type="button" value="Clear"
onclick="document.getElementById('<%= txtValue.ClientID %>').value = ''; return false;" />

 

Code-behind
public partial class MyPropertyStringControl : UserControlBase, IPropertyControl {
    public MyPropertyStringControl() {
        Enabled = true; // Do not forget this!
    }

    public void SetupControl() {
        txtValue.Text = (string)PropertyData.Value;
    }

    public void ApplyChanges() {
        PropertyData.Value = txtValue.Text;
    }

    public bool DisplayEditUI {
        get { return PropertyData.DisplayEditUI; }
    }

    public PropertyData PropertyData { get; set; }

    public PropertyDataCollection Properties { get; set; }

    public RenderType RenderType { get; set; }

    public TableRowLayout RowLayout {
        get { return TableRowLayout.Default; }
    }

    public string ValidationGroup { get; set; }

    public bool Enabled { get; set; }
}

 

And the last line which this post is about:

[Serializable]
[PageDefinitionTypePlugIn]
public class MyPropertyString : PropertyString {
    public override IPropertyControl CreatePropertyControl() {
        return (IPropertyControl)BuildManager.CreateInstanceFromVirtualPath("~/MyPropertyStringControl.ascx", typeof(MyPropertyStringControl));
    }
}

Voila – we’ve got ‘clear’ button near our textbox.

 

P.S. Guys, is there any good code-pasting plug-in for Live Writer?

Sep 17, 2010

Comments

Anders Hattestad
Anders Hattestad Sep 21, 2010 10:33 AM

I have done something simular like this
http://labs.episerver.com/en/Blogs/Anders-Hattestad/Dates/2008/10/User-control-as-a-Property/

Jul 4, 2012 02:33 PM

Great article. Really helpful, thanks!

Please login to comment.
Latest blogs
AEO, GEO and SEO with Epicweb AI Assistant in Optimizely CMS

Traditional SEO remains important, but content must now also be optimized for answer engines and generative AI. This article explains how the Epicw...

Luc Gosso (MVP) | May 11, 2026 |

Accelerating Optimizely CMS and Commerce upgrades with agentic AI (Part 1 of 2)

How Niteco's Upgrade Machine   uses orchestrated AI coding agents to deliver a buildable baseline and a running CMS, then hands over for...

Hung Le Hoang | May 11, 2026

Commerce 15 and CMS 13: Optimizely’s Next Step Toward AI-Powered, Graph-First Commerce

Optimizely is preparing to release Commerce 15 in mid-May 2026 , positioning this as a foundational shift—not just an upgrade. The direction is...

Augusto Davalos | May 7, 2026

The future of Content: Introducing Optimizely CMS 13

Optimizely In the rapidly evolving landscape of digital experience, the "monolithic vs. headless" debate is being replaced by a more sophisticated...

Aniket | May 6, 2026