Don't miss out Virtual Happy Hour this Friday (April 26).

Try our conversational search powered by Generative AI!

Per Magne Skuseth
Mar 10, 2014
  12897
(4 votes)

Attribute-based default values

Default property values on content in EPiServer are set by overriding SetDefaultValues. In an attempt to make my model classes a bit tidier, by not having to do the override in lots of places, I wrote a little piece of code which enables the use of the DefaultValue attribute (found in System.Component), like so:

[DefaultValue("It's all in the hips")]
public virtual string Tip { get; set; }

 

Below is the code that is needed in order to make this work. In this particular case, SitePageData is the base class for all my page types.

public abstract class SitePageData : PageData
{
    public override void SetDefaultValues(ContentType contentType)
    {
        PropertyInfo[] properties = GetType().BaseType.GetProperties();
        foreach (var property in properties)
        {
            var defaultValueAttribute = property.GetAttribute<DefaultValueAttribute>();
            if (defaultValueAttribute != null)
            {
                this[property.Name] = defaultValueAttribute.Value;
            }
        }
        base.SetDefaultValues(contentType);
    }
}

 

Now, as long as my page types inherits SitePageData, the attribute can be utilized. Example:

[ContentType(DisplayName = "Article", GUID = "ED1B0CD5-1307-49FA-853F-ADF46CCEE1CE")]
public class ArticlePage : SitePageData
{
    [DefaultValue(true)]
    public virtual bool HideSomething { get; set; }
 
    [DefaultValue(10)]
    public virtual int MaxNewsItems { get; set; }
 
    [DefaultValue("Bla bla bla")]
    public virtual XhtmlString MainBody { get; set; }
}
Mar 10, 2014

Comments

Mar 10, 2014 10:08 AM

Nice!

Vincent
Vincent Mar 10, 2014 11:12 AM

IMO, I prefer to set these values in one place as you override the SetDefaultValues function, it applies to the new page instance only once. If you make them as attribute, it will mislead the other developers as they may try to use this to alter the property's value.

Mar 10, 2014 11:47 AM

Simple and good idea! Thanx!

valdis
valdis Mar 10, 2014 01:58 PM

Nice!

Gayathri Saravanan
Gayathri Saravanan Mar 13, 2014 05:01 PM

Nice...

Per Magne Skuseth
Per Magne Skuseth May 12, 2014 04:29 PM

Thanks! However, Code Monkey does have a really good point, which should be seriously considered before thinking about implementing something like this.

Henrik Fransas
Henrik Fransas Jun 22, 2015 02:53 PM

Have not seen this before, Great work as always Per Magne!

Shoma Gujjar
Shoma Gujjar Jul 29, 2015 02:07 PM

Hi,

Thanks for the great post. It works well however, if i make my property [Required] , it does not apply the default attribute. Is this an issue?

nitin anand
nitin anand Jan 23, 2019 12:20 PM

Any way to set default values to new properties on existing pages?

Please login to comment.
Latest blogs
Solving the mystery of high memory usage

Sometimes, my work is easy, the problem could be resolved with one look (when I’m lucky enough to look at where it needs to be looked, just like th...

Quan Mai | Apr 22, 2024 | Syndicated blog

Search & Navigation reporting improvements

From version 16.1.0 there are some updates on the statistics pages: Add pagination to search phrase list Allows choosing a custom date range to get...

Phong | Apr 22, 2024

Optimizely and the never-ending story of the missing globe!

I've worked with Optimizely CMS for 14 years, and there are two things I'm obsessed with: Link validation and the globe that keeps disappearing on...

Tomas Hensrud Gulla | Apr 18, 2024 | Syndicated blog

Visitor Groups Usage Report For Optimizely CMS 12

This add-on offers detailed information on how visitor groups are used and how effective they are within Optimizely CMS. Editors can monitor and...

Adnan Zameer | Apr 18, 2024 | Syndicated blog