0

我正在使用以下代码使用 Entity Framework 和 MVC 将表导出到 csv:

string header = string.Join("\t", properties.Select(p => p.Name).ToArray());

有什么方法可以选择我在模型中设置的显示名称,例如显示“小时”而不是“小时”:

    [Display(Name = "Hours")]
    public float hrs { get; set; 

目前我只得到所有变量名而不是我设置的显示名称。似乎应该有一个简单的解决方法,但谷歌并没有太大帮助。

4

1 回答 1

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;
    }

看:

于 2013-07-26T20:26:14.717 回答