1

我有一个从 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_ONEFIELD_TWO.

我试过像

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

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

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

但我收到错误“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。”

如果我可以从MyClasstoMyMetadataClass我可以得到它的属性名称并从MyClass.

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

4

1 回答 1

2

你到底想做什么?如果您想覆盖默认元数据提供程序所做的事情,那么您最好DataAnnotationsModelMetadataProvider用自己的实现替换。这是一些示例代码:

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

在这里,作者添加了对他自己的自定义属性的支持,但是您可以轻松地覆盖DisplayAttribute.

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

于 2013-03-06T11:14:14.767 回答