【发布时间】:2017-02-24 22:29:45
【问题描述】:
在其中一个模型中,我有这样的东西:
[Required]
[Display(Name="Date of Birth")]
[Range(typeof(DateTime), DateTime.MinValue.ToString(), DateTime.Today.ToString())]
public DateTime BirthDate { get; set; }
但是编译器抱怨说
错误 CS0182 属性参数必须是常量表达式, 属性的 typeof 表达式或数组创建表达式 参数类型
有没有一种方法可以通过属性来实现,还是必须将其实现为验证?
【问题讨论】:
-
属性是元数据,必须在编译时知道,所以不可能。您需要使用自定义条件属性,其中值基于模型中的其他属性。例如,您可以使用foolproof
[LessThanOrEqualTo("BaseDate")]其中BaseDate是模型中的一个属性,并设置为DateTime.Today -
或者编写自己的 - 参考 The Complete Guide To Validation In ASP.NET MVC 3 - Part 2,这意味着您可以创建一个
[LessThanOrEqualToToday]属性,该属性不需要模型中的其他属性。 -
请注意,除非您按照this answer 修改
$.validator,否则您无法使用DateTime值获取具有[Range]属性的客户端
标签: c# asp.net-mvc model data-annotations