Learn More





DNN Community Blog

The Community Blog is a personal opinion of community members and by no means the official standpoint of DNN Corp or DNN Platform. This is a place to express personal thoughts about DNNPlatform, the community and its ecosystem. Do you have useful information that you would like to share with the DNN Community in a featured article or blog? If so, please contact .

The use of the Community Blog is covered by our Community Blog Guidelines - please read before commenting or posting.

Introducing the Property Editor Control

Early on in the work on enhancing the profile, it became clear that if we provided the capability for administrators to add profile properties, then we could no longer predict what profile fields there would be and furthermore, what datatype these fields would have.

It thus become obvious that we would need a dynamic Form generator, and once we started analysing the requirements for the generator, it became obvious that this control would have multiple uses.

Enter the new PropertyEditorControl (and its siblings the CollectionEditorControl and SettingsEditorControl).  The PropertyEditorControl can be used to edit/view an Info class.  The CollectionEditor is used for managing the Profile Properties and the SettingsEditor provides similar functioanlity for a Hashtable of Settings.

A full description of how this new control can be used is way beyond the scope of a blog like this.  However, I will try to give a taste of its abilities.

Lets look at the new UI for Editing a User.


This looks like a fairly standard Edit Page.  However, this is a single property Editor control, as shown in the html below.


The @Register directive and the single control declaration is all that is needed in the ascx file to generate the UI shown above.

The code behind is even easier.  In the DataBind method the following code is used to bind the control to the User object.


and in the Update Event Handler the following code is used to retrieve the data from the Control and update the User


Pretty easy - right.  Of course the actual code-behind file contains more code than this but this is all the code neccessary to bind and update the five properties of the User shown in the first image.

The PropertyEditorControl is controlled by Attributes that decorate the Class that is bound to it (in this case the class was the UserInfo class).

There are a number of Attributes that are supported:
  • BrowsableAttribute (or Bowsable) - determines whether the property is displayed
  • CategoryAttribute (or Category) - determines the category (or group) that this property belongs to - can be used to gether with the GroupByMode property to control whether the editor uses Group Headers
  • IsReadOnlyAttribute (or IsReadOnly) - determines whether the property is editable or readonly (the UserName property above has the IsReadOnly Attribute)
  • EditorAttribute (or Editor) - controls the editor that is used to edit the property (checkbox, text box, rich text editor, dropdown combo etc.)
  • RequiredAttribute (or Required) - provides Validation if set to true
  • ControlStyleAttribute (or ControlStyle) - provides custom styling for the property
  • LabelModeAttribute (or LabelMode) - controls where the label is displayed (None, Left, Right, Top, Bottom)
  • SortOrderAttribute (or SortOrder) - controls the order of the properties in the editor, as long as the mode of the Editor (see ascx file above) is set to SortOrderAttribute.
Lets look at an example.


In this example the Username property is decorated with three attributes.  The UserName row in the editor is the first row (sortorder = 0), is required and is readonly.

This is just a taste of what this control can do.


Comment Form

Only registered users may post comments.


2sic Daniel Mettler (124)
Aderson Oliveira (15)
Alec Whittington (11)
Alex Shirley (10)
Andrew Nurse (30)
Anthony Glenwright (5)
Antonio Chagoury (28)
Ash Prasad (21)
Ben Schmidt (1)
Benjamin Hermann (25)
Benoit Sarton (9)
Beth Firebaugh (12)
Bill Walker (36)
Bob Kruger (5)
Brian Dukes (2)
Brice Snow (1)
Bruce Chapman (20)
Bryan Andrews (1)
cathal connolly (55)
Charles Nurse (163)
Chris Hammond (203)
Chris Paterra (55)
Clinton Patterson (28)
Cuong Dang (21)
Daniel Bartholomew (2)
Dave Buckner (2)
David Poindexter (3)
David Rodriguez (2)
Doug Howell (11)
Erik van Ballegoij (30)
Ernst Peter Tamminga (74)
Geoff Barlow (6)
Gifford Watkins (3)
Gilles Le Pigocher (3)
Ian Robinson (7)
Israel Martinez (17)
Jan Blomquist (2)
Jan Jonas (3)
Jaspreet Bhatia (1)
Jenni Merrifield (6)
Joe Brinkman (269)
John Mitchell (1)
Jon Henning (14)
Jonathan Sheely (4)
Jordan Coopersmith (1)
Joseph Craig (2)
Kan Ma (1)
Keivan Beigi (3)
Ken Grierson (10)
Kevin Schreiner (6)
Leigh Pointer (31)
Lorraine Young (60)
Malik Khan (1)
Matthias Schlomann (15)
Mauricio Márquez (5)
Michael Doxsey (7)
Michael Tobisch (3)
Michael Washington (202)
Mike Horton (19)
Mitchel Sellers (28)
Nathan Rover (3)
Navin V Nagiah (14)
Néstor Sánchez (31)
Nik Kalyani (14)
Peter Donker (52)
Philip Beadle (135)
Philipp Becker (4)
Richard Dumas (22)
Robert J Collins (5)
Roger Selwyn (8)
Ruben Lopez (1)
Ryan Martinez (1)
Salar Golestanian (4)
Sanjay Mehrotra (9)
Scott McCulloch (1)
Scott S (11)
Scott Wilkinson (3)
Scott Willhite (97)
Sebastian Leupold (80)
Shaun Walker (237)
Shawn Mehaffie (17)
Stefan Cullmann (12)
Stefan Kamphuis (12)
Steve Fabian (31)
Timo Breumelhof (24)
Tony Henrich (3)
Torsten Weggen (2)
Vicenç Masanas (27)
Vincent Nguyen (3)
Vitaly Kozadayev (6)
Will Morgenweck (37)
Will Strohl (163)
William Severance (5)
Try Evoq
For Free
Start Free Trial
a Demo
See Evoq Live
Need More Information?