我有一个带有属性的模型,这些属性以字符串形式引用彼此。例如
public MyModel
{
[MyAttribute(BindTo = "Foo2")]
public string Foo1 { get; set; }
public string Foo2 { get; set; }
}
这些字段名称稍后在javascript中用于通过名称选择器在DOM上选择另一个,但有没有办法使用表达式来防止属性名称更改破坏选择器?在一个更复杂的模型中,它可能会被遗忘。
我想实现:
[MyAttribute(BindTo = m => m.Foo2)]
这可能吗?我怎么能实现它?到目前为止,我很茫然。
感谢。
答案 0 :(得分:2)
遗憾的是,这是不可能的。 C#属性可以接受一组非常有限的值。基本上任何合法的东西都可以放入C#const
值加上一些数组扩展。表达式树lambdas不允许作为属性参数
答案 1 :(得分:1)
没有。这是不可能的。根据{{3}}:
属性参数限制为常量值 以下类型:
- 简单类型(bool,byte,char,short,int,long,float和double)
- string
- System.Type
- enums
- object(对象类型的属性参数的参数必须是上述类型之一的常量值。)
- 任何上述类型的一维阵列
但你可以这样做:
[MyAttribute(BindMethod = "GetBinding")]
public string Foo1 { get; set; }
public Expression GetBinding()
{
Expression<Func<MyModel, string>> expr = m => m.Foo2;
return expr;
}