2013-03-06 59 views
0

我有一个从Web服务生成的部分类。我想补充ModelMetadata这一类,像这样:使用ModelMetadata获取所有属性

// Automatically generated code 

public partial class MyClass 
{ 
    public string FIELD_ONE ... 
    public DateTime? FIELD_TWO ... 
} 

// My code 

[MetadataType(typeof(MyMetaDataClass))] 
public partial class MyClass 
{ 
} 

public class MyMetaDataClass 
{ 
    [Display(Name="Field One")] 
    public string FIELD_ONE; 

    [Display(Name="Field Two")] 
    public DateTime? FIELD_TWO; 
} 

现在我想获得的MyClass其中有元数据显示属性,即FIELD_ONEFIELD_TWO的所有属性。

我试过的东西

typeof(MyClass).GetProperties().Where(p => Attribute.IsDefined(typeof(DisplayAttribute)) 

但当然的属性是不上MyClass属性。我也试过:

ModelMetadata mmd = ModelMetadata.FromLambdaExpression(m => pi.GetValue(m, null), Html.ViewData); 

但我得到的错误“模板只能与现场访问,访问属性,一维数组的索引,或单参数自定义索引表达式中使用。”

如果我能从MyClass获得MyMetadataClass,那么我可能会获得该属性的名称并从MyClass获取同名的属性。

这是可能的,还是我吠错了树?

+0

检查这这一点,我已经在这里 http://stackoverflow.com/a/24757520/3050647 – elia07 2014-07-15 12:18:56

回答

1

你究竟想要做什么?如果您想覆盖默认元数据提供程序的功能,那么您最好用您自己的实施替换DataAnnotationsModelMetadataProvider。下面是一些示例代码:

http://buildstarted.com/2010/09/14/creating-your-own-modelmetadataprovider-to-handle-custom-attributes/

在这里,笔者是增加了自己的自定义属性的支持,但是你可以很容易地覆盖为DisplayAttribute默认implemntation。

如果这没有帮助,请详细说明您要实现的目标。

+0

在这个例子中回答了这个问题,我希望能够通过'FIELD_ONE'迭代和'上FIELD_TWO' 'MyClass'对象自动。 – 2013-03-06 14:32:10