If you use data annotations to perform validation, you may need a custom attribute:
public class EnsureOneElementAttribute : ValidationAttribute { public override bool IsValid(object value) { var list = value as IList; if (list != null) { return list.Count > 0; } return false; } }
and then:
[EnsureOneElement(ErrorMessage = "At least a person is required")] public List<Person> Persons { get; private set; }
or make it more general:
public class EnsureMinimumElementsAttribute : ValidationAttribute { private readonly int _minElements; public EnsureMinimumElementsAttribute(int minElements) { _minElements = minElements; } public override bool IsValid(object value) { var list = value as IList; if (list != null) { return list.Count >= _minElements; } return false; } }
and then:
[EnsureMinimumElements(1, ErrorMessage = "At least a person is required")] public List<Person> Persons { get; private set; }
Personally, I use FluentValidation.NET instead of data annotations to perform validation, because I prefer the logic of correct validation over declarative. I think he is more powerful. So my validation rule would look something like this:
RuleFor(x => x.Persons) .Must(x => x.Count > 0) .WithMessage("At least a person is required");
Darin Dimitrov Feb 28 '11 at 19:44 2011-02-28 19:44
source share