C# 尝试验证模型中的“年份”字段

C# 尝试验证模型中的“年份”字段,c#,.net,validation,C#,.net,Validation,我正在尝试验证信用卡模型中的“年份”字段。我想获取当前年份作为最小值。这是我的密码: [Required] [Range(DateTime.Now.Year, DateTime.Now.Year+20, ErrorMessage="Please enter a valid year")] [Display(Name = "Exp. Year")] public int expYear { get; set; } 我得到的错误是“DateTime.Now.Year”上的“属性参数必须是常量表达

我正在尝试验证信用卡模型中的“年份”字段。我想获取当前年份作为最小值。这是我的密码:

[Required]
[Range(DateTime.Now.Year, DateTime.Now.Year+20, ErrorMessage="Please enter a valid year")] 
[Display(Name = "Exp. Year")]
public int expYear { get; set; }

我得到的错误是“DateTime.Now.Year”上的“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式”代码。

DateTime.Now.Year
不是一个可以编译到程序集中的常量,属性就在这里。

异常消息相当明确。你到底不明白什么?你可以模仿,这几乎是一个duplicate@Jonesy这个答案不会比今年硬编码好多少。
RangeAttribute
的构造函数仍然只调用一次,因此年份永远不会更新。正确的解决方案是定义一种方法,在每次验证时检查
DateTime.Now.Year
,例如通过。好吧,我不能硬编码2014年,因为明年会发生变化。请查看此帖子。您可能需要编写一个自定义属性,并使用一点反射来获取限制。您可以传递一些常量字符串,让属性知道从何处获取所需的值,或者在特定情况下,您可以只使用DateTime来实现。现在,在该属性的IsValid方法中。