从验证中排除特定属性。 FluentValidation

时间:2016-07-22 16:48:47

标签: validation model-view-controller fluentvalidation modelstate

我有一个具有复杂属性的类:

public class A{
    public B Property{ get; set; }
}

public class B{
    public string Name{ get; set; }
}

在某些情况下,我只使用B型,而在其他情况下使用A型。但我想验证B类型本身但不验证B类型作为A类的一部分。

我写了那些验证器:

public class BValidator : AbstractValidator<B>
{
    public BValidator()
    {
        RuleFor(x => x.Name).NotEmpty();
    }
}
public class AValidator : AbstractValidator<A>
{
    public BValidator()
    {
        RuleFor(x => x.A).Configure(x => x.ClearValidators());
    }
}

它在我的观点中起作用。但是当我发布一个空B.Name的类时,ModelState无效。这是使ModelState有效的方法吗?

1 个答案:

答案 0 :(得分:0)

“B”“A的一部分”不会运行,除非你告诉它。

B验证作为A ........的一部分,只有在您要求时才会发生。

下面我将“B作为A的一部分”作为可选项,通过bool标志进行演示。

public class AValidator : AbstractValidator<A>
{
    public AValidator (bool includeBasAPartOfA)
    {

           if(includeBasAPartOfA)
           {
                    RuleFor(x => x.Property).SetValidator(new BValidator());
           }

    }
}