我正在使用以下代码使用Entity Framework和MVC将表导出到csv:
string header = string.Join("\t", properties.Select(p => p.Name).ToArray());
有没有办法选择我在模型中设置的显示名称,例如显示“Hours”而不是“hrs”:
[Display(Name = "Hours")]
public float hrs { get; set;
目前我只获取所有变量名称而不是我设置的diaplay名称。似乎应该有一个简单的解决方案,但谷歌没有太多的帮助。
答案 0 :(得分:0)
如果要从属性(例如hrs)获取属性,请使用以下方法
public static string GetDisplayName(Type type, string prpName)
{
PropertyInfo[] props = type.GetProperties();
foreach (PropertyInfo prop in props)
{
if(!prop.Name.Equals(prpName))
{
continue;
}
object[] attrs = prop.GetCustomAttributes(true);
foreach (object attr in attrs)
{
if (attr is Display)
{
Display dAttr = (Display)attr;
return dAttr.Name;
}
}
}
return null;
}
如果你想为所有这些获得它,你应该产生一个列表并解决它。
我会建议这样的事情:
public static string[] GetDisplayNames(Type type)
{
PropertyInfo[] props = type.GetProperties();
string[] dNames = new string[props.Length];
for (int i = 0; i < dNames.Length; i++)
{
PropertyInfo prop = props[i];
object[] attrs = prop.GetCustomAttributes(true);
foreach (object attr in attrs)
{
if (attr is Display)
{
Display dAttr = (Display)attr;
dNames[i] = dAttr.Name;
break;
}
}
if (string.IsNullOrEmpty(dNames[i]))
{
dNames[i] = prop.Name;
}
}
return dNames;
}
请参阅: