我有一个从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获得相同名称的属性。
这是可能的吗,还是我找错人了?
发布于 2013-03-06 19:14:15
你到底想做什么?如果您希望覆盖缺省元数据提供程序所做的操作,那么最好用您自己的实现替换DataAnnotationsModelMetadataProvider。下面是一些示例代码:
http://buildstarted.com/2010/09/14/creating-your-own-modelmetadataprovider-to-handle-custom-attributes/
在这里,作者添加了对他自己的自定义属性的支持,但是您也可以很容易地覆盖DisplayAttribute的默认实现。
如果这没有帮助,请提供更多细节,说明您试图实现的目标。
https://stackoverflow.com/questions/15244883
复制相似问题