我有一个从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 MyClass
{
}
public class MyMetaDataClass
{
[Display(Name="Field One")]
public string FIELD_ONE;
[Display(Name="Field Two")]
public DateTime? FIELD_TWO;
}
现在我想获得具有元数据显示属性的MyClass
的所有属性,即FIELD_ONE
和FIELD_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 :(得分:2)
你想要做的是什么?如果要覆盖默认元数据提供程序的功能,那么最好用您自己的实现替换DataAnnotationsModelMetadataProvider
。以下是一些示例代码:
在这里,作者正在添加对自己的自定义属性的支持,但您可以轻松覆盖DisplayAttribute
的默认实现。
如果这没有帮助,请详细说明您要实现的目标。