我正在使用带有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,但我不知道如何扩展此代码。
答案 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);
}
}
我也提到了你在问题中提到的相同链接。
最后的字典是 -