如何做一个自定义验证器来测试两个datetime属性中的一个是否大于另一个

本文关键字:属性 一个 另一个 大于 是否 datetime 两个 验证 测试 何做一 自定义 | 更新日期: 2023-09-27 18:05:54

我有一个名为DateTimeViewModelNullable的类,其中我有一个返回日期时间的方法?

public DateTime? GetDateTime
        {
            get
            {
                DateTime date;
                if (DateTime.TryParse(Date, CultureInfo.CurrentCulture, DateTimeStyles.None, out date))
                {
                    try
                    {
                        return new DateTime(date.Year, date.Month, date.Day, ParseInt(Hour), ParseInt(Minute), 0, DateTimeKind.Utc);
                    }
                    catch (ArgumentException)
                    {
                        return null;
                    }
                }
                return null;
            }
        }

然后在视图模型中有2个该类型的属性公共DateTimeViewModelNullable DateOut {get;设置;}

    [CustomIsValidDate(DateOut.GetDateTime,DateIn.GetDateTime,ErrorMessage = "Returning date must be higher than ingoing date!")]
    public DateTimeViewModelNullable DateIn { get; set; }

我需要确保(并为用户打印),如果开始日期大于结束日期,所以我创建了customvalidator,但不工作

public class CustomIsValidDate : ValidationAttribute
{
    public DateTime? StartDate { get; set; }
    public DateTime? EndDate { get; set; }

    public CustomIsValidDate(DateTime? startDate, DateTime? endDate)
    {
        StartDate = startDate;
        EndDate = endDate;
    }
    public override bool IsValid(object value)
    {
        if (StartDate == null || EndDate == null)
            return true;
        if (EndDate > StartDate)
            return true;
        return false;
    }
}
非静态字段、方法或属性

如何做一个自定义验证器来测试两个datetime属性中的一个是否大于另一个

需要对象引用

使用两个datetime?属性,并在此模型上实现System.ComponentModel.DataAnnotations.IValidatableObject,如下所示:

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var validations = new List<ValidationResult>();
        if (From.HasValue && Until.HasValue)
        {
            if (From.Value.Date < Until.Value.Date)
                validations.Add(new ValidationResult("StartDateMustBeBeforeEndDate"));
            else if (From.Value.Date == From.Value.Date 
                        && From.Value.Hour < Until.Value.Hour)
                validations.Add(new ValidationResult("StartHourMustBeBeforeEndHour"));
            else if (From.Value.Date == From.Value.Date 
                        && From.Value.Hour == Until.Value.Hour 
                        && From.Value.Minute < Until.Value.Minute)
                validations.Add(new ValidationResult("StartMinuteMustBeBeforeEndMinute"));
        }
        return validations;
    }

您在GetDateTime方法中使用静态变量,您必须删除它。