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