我正在使用ASP.NET MVC2,并尝试使用System.ComponentModel.DataAnnotations命名空间中的属性验证我的视图模型.
如何动态设置RangeAttribute的允许有效范围?
例如,如果我想验证输入的日期是否在预期范围内.
这不编译:
[Range(typeof(DateTime),DateTime.Today.ToShortDateString(),DateTime.Today.AddYears(1).ToShortDateString())] public DateTime DeliveryDate { get; set; }
因为“属性参数必须是一个常量表达式,typeof表达式或数组创建表达式的属性参数类型”.
我需要诉诸创建我自己的自定义验证器吗?
解决方法
好的,找到答案. .NET Framework 4提供了一个新的CustomValidationAttribute,这使得以下可能:
[required] [DisplayName("Ideal Delivery Date")] [CustomValidation(typeof(Headerviewmodel),"ValidateDeliveryDate")] public DateTime DeliveryDate { get; set; } public static ValidationResult ValidateDeliveryDate(DateTime deliveryDateToValidate) { if (deliveryDateToValidate.Date < DateTime.Today) { return new ValidationResult("Delivery Date cannot be in the past."); } if (deliveryDateToValidate.Date > DateTime.Today.AddYears(1)) { return new ValidationResult("Delivery Date must be within the next year."); } return ValidationResult.Success; }