猿问

如何使用IValidatableObject?

如何使用IValidatableObject?

我明白IValidatableObject用于验证对象的方式,让我们彼此比较属性。

我仍然希望有一些属性来验证单个属性,但是在某些情况下,我想忽略某些属性上的失败。

我是否试图在下面的情况下不正确地使用它?如果不是,我如何实现这一点?

public class ValidateMe : IValidatableObject{
    [Required]
    public bool Enable { get; set; }

    [Range(1, 5)]
    public int Prop1 { get; set; }

    [Range(1, 5)]
    public int Prop2 { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        if (!this.Enable)
        {
            /* Return valid result here.
             * I don't care if Prop1 and Prop2 are out of range
             * if the whole object is not "enabled"
             */
        }
        else
        {
            /* Check if Prop1 and Prop2 meet their range requirements here
             * and return accordingly.
             */ 
        }
    }}


繁华开满天机
浏览 839回答 3
3回答

慕虎7371278

在验证对象时,在Validator.ValidateObject中应用以下进程:验证属性级属性如果任何验证器无效,则中止返回失败的验证。验证对象级别的属性。如果任何验证器无效,则中止返回失败的验证。如果桌面框架上的对象实现了IValidatableObject,那么调用它的验证方法并返回任何失败这表明,您要做的工作不会成功,因为验证将在步骤2处中止。您可以尝试创建从内置属性继承的属性,并在执行正常验证之前(通过接口)专门检查是否存在启用的属性。或者,您可以将用于验证实体的所有逻辑放在Validate方法。
随时随地看视频慕课网APP
我要回答