C# 使用ModelMetadata获取所有属性
我有一个从web服务生成的分部类。我将C# 使用ModelMetadata获取所有属性,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个从web服务生成的分部类。我将ModelMetadata添加到此类,如下所示: // Automatically generated code public partial class MyClass { public string FIELD_ONE ... public DateTime? FIELD_TWO ... } // My code [MetadataType(typeof(MyMetaDataClass))] public partial class
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\u ONE
和FIELD\u 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
获取相同名称的属性
这是可能的,还是我找错人了?你到底想做什么?如果您想覆盖默认元数据提供程序的功能,那么最好使用自己的实现替换
DataAnnotationsModelMetadataProvider
。下面是一些示例代码:
在这里,作者添加了对自己自定义属性的支持,但您也可以轻松地覆盖displaytribute
的默认实现
如果这没有帮助,请详细说明您试图实现的目标。在示例中,我希望能够自动迭代“MyClass”对象上的
FIELD\u ONE
和FIELD\u TWO