首页 > 解决方案 > 如何使用多个 ViewModel 在 ASP.NET 中添加自定义年龄验证

问题描述

我是 Web 开发的新手,我在验证方面遇到了一些问题。我有 1 个模型“客户”和几个 ViewModel,我正在尝试创建自定义年龄验证,但我不明白我应该如何创建通用方式来投射validationContext.ObjectInstance到任何 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;
    }
}

这是模型

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

和 ViewModel

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

标签: c#asp.netvalidationcastingviewmodel

解决方案


推荐阅读