Как и в этом вопросе , я хочу использовать TypeDescriptor для получения некоторых свойств, но в отличие от этого вопроса, я хочу получить только те свойства, к которым добавлен мой собственный атрибут.
Это для атрибута класса, поэтому я хочу получить свойства в классе, которые имеют пользовательский атрибут.
Что у меня до сих пор
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class AtLeastOneValueRequiredClassAttribute : ValidationAttribute
{
public override bool IsValid(object selection)
{
var att = new Attribute[] { new AtLeastOneValueRequiredAttribute() };
PropertyDescriptorCollection properties =
TypeDescriptor.GetProperties(selection, att);
foreach (var property in properties)
{
if (property != null)
return true;
}
return false;
}
... всегда возвращает ВСЕ свойства, а не только те, которые имеют мой собственный атрибут свойства (AtLeastOneValueRequiredAttribute).
Вот класс, к которому я применяю это:
[AtLeastOneValueRequiredClassAttribute(ErrorMessage = "You must enter at least one number")]
public class MemberDetails
{
[AtLeastOneValueRequired]
[Display(Name = "Home Phone Number")]
[RegularExpression("([0-9]+)", ErrorMessage = "Please provide a valid Home Phone number")]
public string HomePhoneNumber { get; set; }
[AtLeastOneValueRequired]
[Display(Name = "Work Phone Number")]
[RegularExpression("([0-9]+)", ErrorMessage = "Please provide a valid Work Phone number")]
public string WorkPhoneNumber { get; set; }
[AtLeastOneValueRequired]
[Display(Name = "Fax Number")]
[RegularExpression("([0-9]+)", ErrorMessage = "Please provide a valid Fax number")]
public string FaxNumber { get; set; }
[AtLeastOneValueRequired]
[Display(Name = "Mobile Number")]
[RegularExpression("([0-9]+)", ErrorMessage = "Please provide a valid Mobile Phone number")]
public string MobileNumber { get; set; }
}