1

您好我正在使用反射来迭代此模型的属性的属性:

[Required(ErrorMessage = "Username is required")]
[MaxLength(50, ErrorMessage = "Username should not have more then 50 chars")]
[MinLength(25 , ErrorMessage = "Username should have at least 25 chars")]
 public string UserName { get; set; }

 [Required(ErrorMessage = "Password is required")]
 [StringLength(25)]
 public string Password { get; set; }

 public bool RememberMe { get; set; }

foreach (var propertyInfo in type)
       var attr = propertyInfo.CustomAttributes;
       foreach (var customAttributeData in attr)
       {
             var name = customAttributeData.AttributeType.Name;
       }
}

我设法获得了属性名称,但是在获取属性构造函数参数的键/值对时遇到了麻烦。

例如,如何访问属性的构造函数参数和值?

一个示例将能够获得:从必需属性 ErrorMessage.Name 和 ErrorMessage.Value

4

3 回答 3

1

您需要进一步使用反射,Type.GetProperties在每个属性上使用,然后使用PropertyInfo.GetValue来提取每个属性公开公开的属性值。

于 2013-06-18T14:25:48.167 回答
1

您可以使用MemberInfo.NameTypedValue.Value。这是代码:

foreach (var propertyInfo in typeof(YOUR CLASS).GetProperties())
{
    var attr = propertyInfo.GetCustomAttributesData();

    foreach (var customAttributeData in attr)
    {
        foreach (var item in customAttributeData.NamedArguments)
        {
            var name = item.MemberInfo.Name;
            var value = item.TypedValue.Value;
        }
    }
}
于 2013-06-18T14:39:51.007 回答
0

尝试一次查找一种类型的属性:

foreach (var reqAttr in (RequiredAttribute[])propertyInfo.GetCustomAttributes(typeof(RequiredAttribute), false))
{
    // use reqAttr.ErrorMessage and so on, in here
}
于 2013-06-18T14:52:13.337 回答