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; }
}