Need to make a generic implementation using Glassview without passing expression as argument in Glass view Editable helper ?
I recently had to create a generic grid which can be used to display items of multiple templates.
For examples – If you have to create a Grid which can be used for Student and Staff templates. Each of these templates have different set of fields in it.
To make field editable – you should pass expression with field name as “x=> x.studentname” as argument. Now we have Staff template which should display “x=> x.staffname”.
To tackle these situations , I created a template to store the mapping fields in Sitecore and it can be used to display the Grid.
Lets see the code:
Code to extend Editable helper
public abstract class CustomGlassView : GlassView where TModel : class
{
public HtmlString FieldEditable(T model, string fieldName, object attributes = null,
bool isEditable = true, string contents = null, bool isContentEmpty = false)
{
var propName = SitecoreFieldName(fieldName);
if (!string.IsNullOrEmpty(propName))
fieldName = propName;
ParameterExpression selectedProperty = Expression.Parameter(typeof(T), "x");
Expression memberExpr = Expression.PropertyOrField(selectedProperty, fieldName);
var lambda = Expression.Lambda(memberExpr, selectedProperty);
return base.Editable(model, lambda, attributes);
}
public string SitecoreFieldName(string fieldName)
{
var propertyName = string.Empty;
var properties = typeof(T).GetProperties();
foreach (var property in properties)
{
var attribute = property.GetCustomAttributes(typeof(SitecoreFieldAttribute), true).FirstOrDefault() as SitecoreFieldAttribute;
if (attribute != null ? attribute.FieldName == fieldName : false)
{
propertyName = property.Name;
break;
}
}
return propertyName;
}
}
Hello, There’s no doubt that your blog may be having browser compatibility problems. When I take a look at your site in Safari, it looks fine however, if opening in Internet Explorer, it has some overlapping issues. I just wanted to give you a quick heads up! Aside from that, excellent blog!
LikeLike
Thanks a lot for your comment ! I will check in Internet Explorer and apply fixes.
LikeLike