MVC:访问控制器中的显示名称属性

jpo*_*jpo 4 parameters asp.net-mvc

是否可以访问控制器中参数的显示名称?例如,假设我将参数定义为

public class Class1
{
  [DisplayName("First Name")]
  public string firstname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我现在希望能够访问控制器中名字的显示名称。就像是

string name = Model.Class1.firstName.getDisplayName();
Run Code Online (Sandbox Code Playgroud)

有没有类似的方法getDisplayName()可以用来获取显示名称?

小智 6

首先,您需要获取表示该属性的 MemberInfo 对象。你需要进行某种形式的反思:

MemberInfo property = typeof(Class1).GetProperty("Name");
Run Code Online (Sandbox Code Playgroud)

(我使用的是“旧式”反射,但如果您可以在编译时访问该类型,您也可以使用表达式树)

然后您可以获取属性并获取 DisplayName 属性的值:

var attribute = property.GetCustomAttributes(typeof(DisplayNameAttribute), true)
      .Cast<DisplayNameAttribute>().Single();
string displayName = attribute.DisplayName;
Run Code Online (Sandbox Code Playgroud)