如果我创建了一个属性:
public class TableAttribute : Attribute {
public string HeaderText { get; set; }
}
我适用于我在课堂上的一些属性
public class Person {
[Table(HeaderText="F. Name")]
public string FirstName { get; set; }
}
在我的视图中,我有一个显示在表格中的人员列表..如何检索HeaderText的值以用作我的列标题?有点像...
<th><%:HeaderText%></th>
答案 0 :(得分:28)
在这种情况下,您首先检索相关的PropertyInfo
,然后调用MemberInfo.GetCustomAttributes
(传入您的属性类型)。将结果转换为属性类型的数组,然后照常访问HeaderText
属性。示例代码:
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.Property)]
public class TableAttribute : Attribute
{
public string HeaderText { get; set; }
}
public class Person
{
[Table(HeaderText="F. Name")]
public string FirstName { get; set; }
[Table(HeaderText="L. Name")]
public string LastName { get; set; }
}
public class Test
{
public static void Main()
{
foreach (var prop in typeof(Person).GetProperties())
{
var attrs = (TableAttribute[]) prop.GetCustomAttributes
(typeof(TableAttribute), false);
foreach (var attr in attrs)
{
Console.WriteLine("{0}: {1}", prop.Name, attr.HeaderText);
}
}
}
}
答案 1 :(得分:3)
例如:
[Table(HeaderText="F. Name 1")]
[Table(HeaderText="F. Name 2")]
[Table(HeaderText="F. Name 3")]
public string FirstName { get; set; }
在您的情况下,我假设您只希望每个属性允许一个属性。在这种情况下,您可以通过以下方式访问自定义属性的属性:
var tableAttribute= propertyInfo.GetCustomAttribute<TableAttribute>();
Console.Write(tableAttribute.HeaderText);
// Outputs "F. Name" when accessing FirstName
// Outputs "L. Name" when accessing LastName