I have the following class:
public class CreateJob { [Required] public int JobTypeId { get; set; } public string RequestedBy { get; set; } public JobTask[] TaskDescriptions { get; set; } }
I'd like to have a data annotation above TaskDescriptions
so that the array must contain at least one element? Much like [Required]
. Is this possible?
It can be done using standard Required and MinLength validation attributes, but works ONLY for arrays:
public class CreateJob { [Required] public int JobTypeId { get; set; } public string RequestedBy { get; set; } [Required, MinLength(1)] public JobTask[] TaskDescriptions { get; set; } }
I've seen a custom validation attribute used for this before, like this:
(I've given sample with a list but could be adapted for array or you could use list)
public class MustHaveOneElementAttribute : ValidationAttribute { public override bool IsValid(object value) { var list = value as IList; if (list != null) { return list.Count > 0; } return false; } } [MustHaveOneElementAttribute (ErrorMessage = "At least a task is required")] public List<Person> TaskDescriptions { get; private set; } // as of C# 8/9 this could be more elegantly done with public class MustHaveOneElementAttribute : ValidationAttribute { public override bool IsValid(object value) { return value is IList {Count: > 0}; } }
Credit to Antonio Falcão Jr. for elegance
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With