获取DisplayName属性的所有值

时间:2016-12-15 14:02:54

标签: c# asp.net-mvc entity-framework-6 data-annotations

我正在使用带有EntityFramework 6 DataAnnotations的asp.net MVC 5。 我想知道是否有办法获取对象的所有DisplayName并将它们保存在变量中的Controller类中。

例如,考虑班级:

public class Class1
{
    [DisplayName("The ID number")]
    public int Id { get; set; }

    [DisplayName("My Value")]
    public int Value { get; set; }

    [DisplayName("Label name to display")]
    public string Label { get; set; }
}

如何获取所有属性的DisplayName值?例如,如何创建一个返回Dictionary< string,string >的函数,该函数具有带有DisplayName的属性名称和值的键,如下所示:

{ "Id": "The ID name", "Value": "My Value", "Label": "Label name to display"}.

我已经看过这个主题stackoverflow - get the value of DisplayName attribute,但我不知道如何扩展此代码。

2 个答案:

答案 0 :(得分:4)

如果您并不真正关心DisplayName属性,而是关注将使用的有效显示名称(例如通过数据绑定),最简单的方法是使用TypeDescriptor.GetProperties方法:

var info = TypeDescriptor.GetProperties(typeof(Class1))
    .Cast<PropertyDescriptor>()
    .ToDictionary(p => p.Name, p => p.DisplayName);

答案 1 :(得分:0)

您可以使用以下代码 -

 Class1 c = new Class1();
 PropertyInfo[] listPI = c.GetType().GetProperties();
 Dictionary<string, string> dictDisplayNames = new Dictionary<string, string>();
 string displayName = string.Empty;

 foreach (PropertyInfo pi in listPI)
 {
    DisplayNameAttribute dp = pi.GetCustomAttributes(typeof(DisplayNameAttribute), true).Cast<DisplayNameAttribute>().SingleOrDefault();
            if (dp != null)
            {
                displayName = dp.DisplayName;
                dictDisplayNames.Add(pi.Name, displayName);
            }
 }

我也提到了你在问题中提到的相同链接。

最后的字典是 -

enter image description here