diff --git a/src/Orchard/ContentManagement/InfosetHelper.cs b/src/Orchard/ContentManagement/InfosetHelper.cs index 379c2a665..9b7cae247 100644 --- a/src/Orchard/ContentManagement/InfosetHelper.cs +++ b/src/Orchard/ContentManagement/InfosetHelper.cs @@ -10,19 +10,26 @@ namespace Orchard.ContentManagement { public static TProperty Retrieve(this TPart contentPart, Expression> targetExpression, - TProperty defaultValue = default(TProperty), + Func defaultValue, bool versioned = false) where TPart : ContentPart { var propertyInfo = ReflectionHelper.GetPropertyInfo(targetExpression); var name = propertyInfo.Name; - var infosetPart = contentPart.As(); var el = infosetPart == null ? null : (versioned ? infosetPart.VersionInfoset.Element : infosetPart.Infoset.Element) .Element(contentPart.GetType().Name); var attr = el != null ? el.Attribute(name) : default(XAttribute); - return attr == null ? defaultValue : XmlHelper.Parse(attr.Value); + return attr == null ? defaultValue != null ? defaultValue() : default(TProperty) : XmlHelper.Parse(attr.Value); + } + + public static TProperty Retrieve(this TPart contentPart, + Expression> targetExpression, + TProperty defaultValue = default(TProperty), + bool versioned = false) where TPart : ContentPart { + + return Retrieve(contentPart, targetExpression, () => defaultValue, versioned); } public static TProperty Retrieve(this ContentPart contentPart, string name,