数据注释验证属性 - 强制设置(即需要其中一个)

时间:2014-02-04 09:38:19

标签: c# validation data-annotations

我们希望使用数据注释验证属性来表示在某个属性集中,至少需要一个属性。

E.g:

class X
{
    [Set("Set1", Validation=typeof(RequiredAttribute))]
    public string A { get; set; }

    [Set("Set1", Validation=typeof(RequiredAttribute))]
    public string B { get; set; }
}

这意味着必须设置AB。是这样的吗?

如果没有,您是否有可能在自定义数据注释验证属性中访问要验证的对象的父对象,以便我们自己可以执行此操作?目前,我们只获得AB,并且没有机会到达另一个。

1 个答案:

答案 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");            
    }
}