我们希望使用数据注释验证属性来表示在某个属性集中,至少需要一个属性。
E.g:
class X
{
[Set("Set1", Validation=typeof(RequiredAttribute))]
public string A { get; set; }
[Set("Set1", Validation=typeof(RequiredAttribute))]
public string B { get; set; }
}
这意味着必须设置A
或B
。是这样的吗?
如果没有,您是否有可能在自定义数据注释验证属性中访问要验证的对象的父对象,以便我们自己可以执行此操作?目前,我们只获得A
或B
,并且没有机会到达另一个。
答案 0 :(得分:1)
你可以,但不是那样。您需要使您的类成为IValidatableObject
接口的一部分(它也来自DataAnnotations命名空间)。
然后,您可以实现验证功能,您可以使用自己的业务逻辑检查有效性。
注意:Validate
方法的名称和签名是固定的,因为它们来自界面。
public class Actor : AbstractDataholder, IValidatableObject
{
public string A { get; set; }
public string B { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(string.IsnullorWhiteSpace(this.A) && string.IsnullorWhiteSpace(this.B))
return new ValidationResult("NOT VALID");
}
}