1

I have a select field

<select asp-for="UserCitizenships" asp-items="Model.CitizenshipsList" class="select2 required">

that is populated by a multiselect list

public MultiSelectList CitizenshipsList { get; set; }

And returns a List of Int

 public List<int> UserCitizenships

that I handle manually in the backend. Validation from Data Annotations is not working. I need at least one property to be populated when the form submits. Any ideas?

  [Required(ErrorMessage = Helpers.ErrorMessages.Required)]
    public List<int> UserCitizenships
    {
        get
        {
           ....
Georgia Kalyva
  • 737
  • 2
  • 9
  • 23

1 Answers1

1

I would have thought the following would work

[Required, MinLength(1, ErrorMessage = "At least one item required")]
public List<int> UserCitizenships { get; set; }

Alternatively you could create a custom data annotation or use class level validation

public class YourClass : IValidatableObject
{
    [Required]
    List<int> UserCitizenships

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (UserCitizenships.Count < 1)
        {
            yield return new ValidationResult(
                $"At least one UserCitizenship should be specified.",
                new[] { nameof(UserCitizenships) });
        }
    }   
}
eVolve
  • 1,340
  • 1
  • 11
  • 30