首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ModelMetadata获取所有属性

使用ModelMetadata获取所有属性
EN

Stack Overflow用户
提问于 2013-03-06 18:33:36
回答 1查看 1.1K关注 0票数 1

我有一个从web服务生成的分部类。我将ModelMetadata添加到这个类,如下所示:

代码语言:javascript
复制
// 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

我试过像这样的东西

代码语言:javascript
复制
typeof(MyClass).GetProperties().Where(p => Attribute.IsDefined(typeof(DisplayAttribute))

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

代码语言:javascript
复制
ModelMetadata mmd = ModelMetadata.FromLambdaExpression(m => pi.GetValue(m, null), Html.ViewData);

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

如果我可以从MyClass转换到MyMetadataClass,那么我也许能够获得它的属性名称,并从MyClass获得相同名称的属性。

这是可能的吗,还是我找错人了?

EN

回答 1

Stack Overflow用户

发布于 2013-03-06 19:14:15

你到底想做什么?如果您希望覆盖缺省元数据提供程序所做的操作,那么最好用您自己的实现替换DataAnnotationsModelMetadataProvider。下面是一些示例代码:

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

在这里,作者添加了对他自己的自定义属性的支持,但是您也可以很容易地覆盖DisplayAttribute的默认实现。

如果这没有帮助,请提供更多细节,说明您试图实现的目标。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15244883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档