如何获取DataAnnotation显示名称?

时间:2014-05-12 13:59:58

标签: c# asp.net-mvc-4 data-annotations

我有EF模型类。为此,我为该部分类创建了MetadataType

现在我需要从c#中读取或获取对象属性的所有这些displayname。所以我可以使用Excel Excel标题行。

[MetadataType(typeof(vwGridMetadata))]
public partial class vwGrid
{

}

public class vwGridMetadata
{
    [Display(Name = "Note ID")]
    public int intNoteID { get; set; }
    [Display(Name = "Global Number")]
    public string strGlobalLoanNumber { get; set; }
    [Display(Name = "Data Source ID")]
    public Nullable<int> intDataSourceID { get; set; }
    [Display(Name = "Sample ID")]
    ....
}

vwGrid grd = new vwGrid;

这里我想在迭代中获取所有属性displayname。所以我可以将它们添加到excel Header行和单元格中。怎么做?

4 个答案:

答案 0 :(得分:12)

ReflectionLINQ是你的朋友

typeof(vwGridMetadata)
.GetProperties()
.Select(x => x.GetCustomAttribute<DisplayAttribute>())
.Where(x => x != null)
.Select(x => x.Name);

注意:您需要在项目中加入System.ReflectionSystem.Linq命名空间才能使用这些方法。

答案 1 :(得分:1)

ASP.Net Core 2:

 var listOfFieldNames = typeof(vwGridMetadata)
                    .GetProperties()
                    .Select(f => f.GetCustomAttribute<DisplayAttribute>())
                    .Where(x => x != null)
                    .Select(x=>x.Name)
                    .ToList();

答案 2 :(得分:0)

只需执行以下操作:

private string GetDisplayName(vwGridMetadata data, Object vwGridMetadataPropertie)
{
    string displayName = string.Empty;

    string propertyName = vwGridMetadataPropertie.GetType().Name;

    CustomAttributeData displayAttribute = data.GetType().GetProperty(propertyName).CustomAttributes.FirstOrDefault(x => x.AttributeType.Name == "DisplayAttribute");

    if (displayAttribute != null)
    {
        displayName = displayAttribute.NamedArguments.FirstOrDefault().TypedValue.Value;
    }

    return displayName;
}

您可以创建一个foreach来遍历vwGridMetadata类的属性并在每个属性上调用此方法,或者只在内部进行一个foreach并从该方法中删除Object参数。

答案 3 :(得分:-3)

[必填]         [Display(Name =“ Usuario1”,AutoGenerateFilter = false)]         [StringLength(10,ErrorMessage =“纵向的El {0}实体{1}和{2}。”,MinimumLength = 6)]         公共字符串Usuario {get;组; }