DateTime是否有RangeAttribute?
我的模型中有一个Datetime字段,需要对其进行validation,以便在创建时它必须介于Now和6 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.Now
和DateTime.Now.AddYears(-6)
都不是常量。
但是,您仍然可以创建自己的validation属性:
public class DateTimeRangeAttribute : ValidationAttribute { //implementation }
根据Rick Anderson的 RangeAttribute
, jQueryvalidation不适用于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; }