我想验证日期时间,我的代码是:
[Range(typeof(DateTime),DateTime.Now.AddYears(-65).ToShortDateString(),DateTime.Now.AddYears(-18).ToShortDateString(),ErrorMessage = "Value for {0} must be between {1} and {2}")] public DateTime Birthday { get; set; }
但我得到错误:
An attribute argument must be a constant expression,typeof expression or array creation expression of an attribute parameter type
请帮帮我?
解决方法
这意味着Range属性的值不能在以后确定,必须在编译时确定. DateTime.Now不是常量,它根据代码运行的时间而变化.
你想要的是一个自定义DataAnnotation验证器.以下是如何构建一个示例:
How to create Custom Data Annotation Validators
将您的日期验证逻辑放在IsValid()中
这是一个实现.我也使用DateTime.Subtract()而不是负数年.
public class DaterangeAttribute : ValidationAttribute { public int FirstDateYears { get; set; } public int SecondDateYears { get; set; } public DaterangeAttribute() { FirstDateYears = 65; SecondDateYears = 18; } public override bool IsValid(object value) { DateTime date = DateTime.Parse(value); // assuming it's in a parsable string format if (date >= DateTime.Now.AddYears(-FirstDateYears)) && date <= DateTime.Now.AddYears(-SecondDateYears))) { return true; } return false; }
}
用法是:
[Daterange(ErrorMessage = "Must be between 18 and 65 years ago")] public DateTime Birthday { get; set; }
它也是通用的,因此您可以指定多年的新范围值.
[Daterange(FirstDateYears = 20,SecondDateYears = 10,ErrorMessage = "Must be between 10 and 20 years ago")] public DateTime Birthday { get; set; }
原文地址:https://www.jb51.cc/aspnet/251117.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。