C# 自定义验证属性:比较同一模型中的两个日期

C# Custom Validation Attributes: Comparing two Dates in the same model

我创建了一个继承表单 ValidationAttibute Class 的自定义验证 class。它确保不能选择过去的日期。现在我有第二次约会,需要在第一次约会后至少 3 天。比较两个日期并仅在第二个日期比第一个日期晚 3 天(终止日期和存档日期)

时才继续的最佳方法是什么

这是我第一次约会的密码

public class CustomTerminationDate : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime dateTime = Convert.ToDateTime(value);
        return dateTime >= DateTime.Now.Date;
    }
}

实现如下:

[Required, Display(Name = "Termination Date")]
    [DataType(DataType.Date)]
    [CustomTerminationDate(ErrorMessage = "Termination Date can not be in the past")]        
    public DateTime TerminationDate { get; set; }

验证属性非常适合验证单个 属性。我不会尝试使用属性验证多个属性,因为您无法确定字段的分配顺序以及验证应在何时进行。

相反,我会实施 IValidatableObject;

public class YourClass: IValidatableObject
{
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (TerminationDate < OtherDate + TimeSpan.FromDays(3))
            yield return new ValidationResult("... error message here ...");
    }
}