【问题标题】:Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions模板只能与字段访问、属性访问、单维数组索引或单参数自定义索引器表达式一起使用
【发布时间】:2013-05-14 15:54:27
【问题描述】:

错误行;

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&lt;LsDataModels.MenuAuths&gt; { ColumnProperty = c =&gt; c.MenuId } 但是这一行有错误new Column&lt;LsDataModels.MenuAuths&gt; { ColumnProperty = c =&gt; c.AllowNew},

我可以尝试更改属性类型 bool?boolNulable&lt;bool&gt; 但错误一直在继续。我也删除了[BsonDefaultValue(false)] 属性没有任何改变。

我能做什么?

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

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

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

    我用PropertyInfo

    我在Expression&lt;Func&lt;T, dynamic&gt;&gt;上添加了扩展方法

    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 上需要的所有属性和属性

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2014-03-08
      • 2012-06-09
      相关资源
      最近更新 更多