我正在尝试将数据验证添加到我的日期时间属性中,但我想强制用户选择DateTime.Now
和小于DateTime.now.addyears(+1)
一年后的日期这是我的代码:
public class DateDebut : ValidationAttribute
{
public override bool IsValid(object value)
{
if (value == null) return false;
DateTime enteredDate = (DateTime)value;
if ( (enteredDate >= DateTime.Now) && (enteredDate <= DateTime.Now.AddYears(+1)))
return true;
else
return false;
}
}
[Required]
[Display(Name = "De : ")]
[DataType(DataType.Date)]
[DateDebut(ErrorMessage="Date invalide")]
public DateTime dd { get; set; }
这个自定义验证不起作用,验证没有执行,人工智能认为我错过了一些非常简单的东西?
我完全同意丹尼尔的观点,
但是,我发现当我需要对模型中的属性进行比较时,我使用 IValidatableObject
http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.ivalidatableobject.aspx
我发现对于大多数小型类型的比较来说,它更快、更容易你会有一些看起来像这样的
public class myModel : IvalidatableObject
{
string debut = DateTime.Now.ToShortDateString();
string fin = DateTime.Now.AddYears(+1).ToShortDateString();
[Required]
[Display(Name = "De : ")]
[DataType(DataType.Date)]
public DateTime dd { get; set; }
public IEnumerable<ValidationResult> Validate()
{
if(this.debut > this.fin)
{
yield return new ValidationResult("debut cannot be greated then fin");
}
}
}
阅读并了解最适合您的内容
属性本质上是静态的。您是否考虑过编写自己的属性进行验证?网络上有几个示例应该可以帮助您入门。
您还可以从RangeAttribute
继承并根据需要注入它。