【发布时间】:2016-12-15 22:50:07
【问题描述】:
当我实现从 ValidationAttribute 类继承的自定义属性时,我总是覆盖 bool IsValid(object value) 方法,而忽略另一个原型为 ValidationResult IsValid(objet value, ValidationContext validationContext) 的方法。
也许,即使我不使用验证上下文或结果(我使用 EntityFramework 和 ModelState.IsValid 控制器属性的验证),我也应该重写第二种方法。或者继续忽略重载的方法。如果是这样,我是否可以根据调用属性验证的上下文使对象有效或无效?如下代码所示的情况有问题吗?
class StrictlyPreviousAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var dateTime = value as DateTime?;
return dateTime == null || dateTime <= DateTime.Today;
}
}
class PreviousAttribute : StrictlyPreviousAttribute
{
public override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var dateTime = value as DateTime?;
if(dateTime == DateTime.Today)
{
return ValidationResult.Success;
}
else
{
return base.IsValid(object);
}
}
}
我不知道是否存在对对象的误解,或者我是否遗漏了一些要点。是否有一种方法我应该最好覆盖而不是其他方法。我应该同时覆盖两者吗?
【问题讨论】:
-
ValidationContext 使访问其他属性变得容易,并在 .NET 4.0 中添加。这是一个很好的描述:devtrends.co.uk/blog/…
-
@SteveGreene 我从您提供的链接中发布了相关部分。答案的功劳应该是你的。谢谢。
标签: .net entity-framework validation attributes