0

我有一個複雜屬性的類:從驗證中排除特定屬性。 FluentValidation

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

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

在某些情況下,我只用B型,而在另一種類型。但我想驗證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有效的方法嗎?

回答

0

「B」「A的一部分」不會運行,除非您告訴它。

B驗證作爲A的一部分........只會在您提出要求時纔會發生。

下面我通過一個bool標誌來演示「B作爲A的一部分」作爲可選項。

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

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

    } 
}