模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式

时间:2013-05-14 15:54:27

标签: c# asp.net-mvc

错误行;

ModelMetadata metadata = ModelMetadata.FromLambdaExpression<T, object>(ColumnProperty, pHtml.ViewData);

模型

public class MenuAuths : EntityBase
{
[BsonIgnoreIfNull]
        [BsonRepresentation(BsonType.ObjectId)]
        public string MenuId { get; set; }
[BsonDefaultValue(false)]
        public bool AllowNew { get; set; }
}

CSHTML;

new Column<LsDataModels.MenuAuths> { ColumnProperty = c => c.MenuId },
new Column<LsDataModels.MenuAuths> { ColumnProperty = c => c.AllowNew},

这一行工作new Column<LsDataModels.MenuAuths> { ColumnProperty = c => c.MenuId } 但是这一行有一个错误new Column<LsDataModels.MenuAuths> { ColumnProperty = c => c.AllowNew},

我可以尝试更改属性类型bool?boolNulable<bool>,但错误仍在继续。我也删除了[BsonDefaultValue(false)]属性没有任何变化。

我该怎么办?

编辑错误模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的解决方案。

我使用PropertyInfo

我在Expression<Func<T, dynamic>>

上添加了exdent方法
public static PropertyInfo GetProperty<T>(this Expression<Func<T, dynamic>> expression)
        {
            MemberExpression memberExpression = null;

            if (expression.Body.NodeType == ExpressionType.Convert)
            {
                memberExpression = ((UnaryExpression)expression.Body).Operand as MemberExpression;
            }
            else if (expression.Body.NodeType == ExpressionType.MemberAccess)
            {
                memberExpression = expression.Body as MemberExpression;
            }

            if (memberExpression == null)
            {
                throw new ArgumentException("Not a member access", "expression");
            }

            return memberExpression.Member as PropertyInfo;
        }

并更改此行

ModelMetadata metadata = ModelMetadata.FromLambdaExpression<T, object>(ColumnProperty, pHtml.ViewData);

PropertyInfo pi = FieldProperty.GetProperty<T>();

我可以访问PropertyInfo

上的所有属性和属性