DateTime是否有RangeAttribute?

我的模型中有一个Datetime字段,需要对其进行validation,以便在创建时它必须介于Now6 Years Prior之间 。 我尝试过使用范围之类的

[Range(DateTime.Now.AddYears(-6), DateTime.Now)] public DateTime Datetim { get; set; } 

但是这会抛出一个错误,无法将系统日期时间转换为double。 任何人都可以在模型本身中提出解决方法吗?

使用此属性:

 public class CustomDateAttribute : RangeAttribute { public CustomDateAttribute() : base(typeof(DateTime), DateTime.Now.AddYears(-6).ToShortDateString(), DateTime.Now.ToShortDateString()) { } } 

即使Range属性有一个重载,它接受该类型的类型和边界值,并允许这样的事情:

 [Range(typeof(DateTime), "1/1/2011", "1/1/2012", ErrorMessage="Date is out of Range")] 

使用此属性无法实现您想要实现的目标。 问题是属性只接受常量作为参数。 显然, DateTime.NowDateTime.Now.AddYears(-6)都不是常量。

但是,您仍然可以创建自己的validation属性:

 public class DateTimeRangeAttribute : ValidationAttribute { //implementation } 

根据Rick Anderson的 RangeAttributejQueryvalidation不适用于RangeAttribute 。 如果您使用的是ASP.NET MVC 5的内置jQueryvalidation,则会导致所选解决方案不正确。

相反,请参阅此答案中的以下代码。

 public class WithinSixYearsAttribute : ValidationAttribute { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { value = (DateTime)value; // This assumes inclusivity, ie exactly six years ago is okay if (DateTime.Now.AddYears(-6).CompareTo(value) <= 0 && DateTime.Now.CompareTo(value) >= 0) { return ValidationResult.Success; } else { return new ValidationResult("Date must be within the last six years!"); } } } 

并且它像任何其他属性一样实现。

 [WithinSixYears] public DateTime SixYearDate { get; set; }