在其中一个模型中,我有类似的东西:
[Required]
[Display(Name="Date of Birth")]
[Range(typeof(DateTime), DateTime.MinValue.ToString(), DateTime.Today.ToString())]
public DateTime BirthDate { get; set; }
但是编译器抱怨
错误CS0182属性参数必须是常量表达式, typeof表达式或数组创建表达式的属性 参数类型
有没有办法可以通过属性来实现,还是必须将其作为验证来实现?
答案 0 :(得分:1)
编写自己继承自PastDateAttribute
的属性ValidationAttribute
类。然后使用BirthDate
注释属性[PastDate]
。
示例实现例如是here:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class PastDateAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext context)
{
DateTime? dateValue = value as DateTime?;
var memberNames = new List<string>() {context.MemberName};
if (dateValue != null)
{
if (dateValue.Value.Date > DateTime.UtcNow.Date)
{
return new ValidationResult(Resources.PastDateValidationMessage, memberNames);
}
}
return ValidationResult.Success;
}
}
用法:
[Required]
[Display(Name="Date of Birth")]
[PastDate]
public DateTime BirthDate { get; set; }
答案 1 :(得分:0)
您必须指定const。静态字符串不是const。该属性希望const字符串不是静态字符串。
为了获得最佳实践,请创建一个类并添加const dateMinValue和dateMaxvalue。或者您可以手动添加“0001年1月1日星期一”。但我更喜欢静态类,并添加像const字符串,它更容易。