显示自定义属性mvc中的反射

时间:2013-07-24 09:09:42

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

我正在尝试创建一个显示属性CountryText

的值的自定义属性
[DisplayNameProperty("CountryText")]
    public string Country { get; set; }

    public string CountryText { get; set; }

这是属性的代码

namespace Registration.Front.Web.Validators
    {
        public class RegistrationDisplayNameAttribute:DisplayNameAttribute
        {
            private readonly PropertyInfo _proprtyInfo;
            public RegistrationDisplayNameAttribute(string resourceKey):base(resourceKey)
            {

            }

            public override string DisplayName
            {
                get
                {
                    if(_proprtyInfo==null)

                }

            }
        }
    }

如何在我的属性代码中进行反射以获取名为resourceKey的fild的值?

1 个答案:

答案 0 :(得分:-1)

由于无法通过构造函数将实例传递给属性,(即属性在编译时包含在元数据中,然后通过反射使用,您可以看到Pass instance of Class as parameter to Attribute constructor

有一个工作arround来传递实例,那就是在构造函数中这样做:

  public class Foo
  {
    [RegistrationDisplayNameAttribute("MyProp2")]
    public string MyProp { get; set; }

    public string MyProp2 { get; set; }


    public Foo()
    {
      var atts = this.GetType().GetCustomAttributes();
      foreach (var item in atts)
      {
        if (atts is RegistrationDisplayNameAttribute)
        {
          ((RegistrationDisplayNameAttribute)atts).Instance = this;
        }
      }
    }
  }

并在DisplayName中执行:

public override string DisplayName
{
  get
  {
    var property = Instance.GetType().GetProperty(DisplayNameValue);
    return property.GetValue(Instance, null) as string;
  }

}

我不推荐这样的方法:(