How to add custom age validation in ASP.NET using multiple ViewModels

Viewed 70

I am new to Web development and I have got some problem with validation. I have 1 model "Customer" and several ViewModels and I am trying to create custom age validation, but I didn't understand how should I create universal way to cast validationContext.ObjectInstance to any ViewModel.

public class MinimumAgeAttribute : ValidationAttribute
{
    private readonly int _minAge;
    public MinimumAgeAttribute(int _minAge)
    {
        this._minAge = _minAge;
    }
    protected override ValidationResult? IsValid(object? value, ValidationContext validationContext)
    {
        var customer = validationContext.ObjectInstance; // here are problems
        //and so on....
        return ValidationResult.Success;
    }
}

Here is model

    public class Customer
    {
        [Key]
        public int Id { get; set; }
        [Required]
        [StringLength(255)]
        public string Name { get; set; }

        public bool IsSubscribedToNewsLetter { get; set; }

        public MembershipType MembershipType { get; set; }

        public byte MembershipTypeId { get; set; }

        [Column(TypeName = "datetime")]
        [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
        [Display(Name = "Birth date")]
        [MinimumAge(18)]
        public DateTime? BirthDate { get; set; }
    }

And ViewModels

public class CustomerDataViewModel
        {
            [Required]
            public string Name { get; set; }
            public IEnumerable<MembershipType> MembershipType { get; set; }
            public bool IsSubscribedToNewsLetter { get; set; }
            public byte MembershipTypeId { get; set; }
            [MinimumAge(18)]
            public DateTime? BirthDate { get; set; }
        }
     
        public class CustomerEditDataViewModel
        {
            public int Id { get; set; }
            [Required]
            public string Name { get; set; }
            public IEnumerable<MembershipType> MembershipType { get; set; }
            public bool IsSubscribedToNewsLetter { get; set; }
            public byte MembershipTypeId { get; set; }
            [DataType(DataType.Date)]
            [MinimumAge(18)]
            public DateTime? BirthDate { get; set; }
        }
0 Answers
Related