Validation 嵌套验证器只能与成员表达式一起使用

Validation 嵌套验证器只能与成员表达式一起使用,validation,member,fluent,Validation,Member,Fluent,我正在尝试使用流利的验证。 希望对IList项运行验证 public class ProgramDetailsValidatorForBulkEdit : ValidatorCollection<IList<ProgramDTO>> { public ProgramDetailsValidatorForBulkEdit() { RuleFor(x => x).Cascade(CascadeMode.StopOnFirstFail

我正在尝试使用流利的验证。 希望对IList项运行验证

  public class ProgramDetailsValidatorForBulkEdit : ValidatorCollection<IList<ProgramDTO>>
{

    public ProgramDetailsValidatorForBulkEdit()
    {
        RuleFor(x => x).Cascade(CascadeMode.StopOnFirstFailure).SetCollectionValidator(new ProgramDetailsValidator1());

    }
}
public class ProgramDetailsValidator1 : AbstractValidator<ProgramDTO>
{
    public ProgramDetailsValidator1()
    {
        RuleFor(c => c.Capacity).NotNull()
            .WithMessage(String.Format(AppConstants.ValidationTemplates.RequiredField, "Capacity"));

    }
}
错误原因 错误消息包含单词“成员表达式”。问题在(x=>x)的
规则中。嵌套验证器必须仅与选择
x
的某些成员的lambda一起使用,例如,与
x=>x.MySubobject1
一起使用。Lambda
x=>x
不选择
x
的任何成员

验证集合的步骤 创建包含列表的对象:

公共类MyObject
{
公共列表项{get;set;}
}
您可以使用泛型为所有列表创建一个通用对象和验证器

公共类MyObjectValidator:AbstractValidator
{
公共MyObjectValidator()
{
RuleFor(x=>x.Items)//将起作用,因为它不是“x=>x”
.SetCollectionValidator(新的ItemValidator());
}
}
验证对象的步骤 使用指向成员的lambda来验证内部对象,并使用对象验证器的继承来验证根
x

公共类MySimpleObject{…}
公共类MyCompositeObject:MySimpleObject
{
公共MyType1 MySubobject1{get;set;}
公共MyType2 MySubobject2{get;set;}
}
public类MySimpleObjectValidator:AbstractValidator
{
public MySimpleObjectValidator()
{
...
}
}
公共类MyCompositeObjectValidator:MySimpleObjectValidator
{
public MyCompositeObjectValidator():base()//调用base validator来实现用MySimpleObjectValidator编写的“x=>x”的规则!
{
//子对象的规则将起作用
RuleFor(x=>x.MySubobject1)
.SetValidator(新的MyType1Validator())
.WithName(“子对象1的错误组”);
RuleFor(x=>x.MySubobject2)
.SetValidator(新的MyType2Validator())
.WithName(“子对象2的错误组”);
}   
}
RuleFor(x => x).Cascade(CascadeMode.StopOnFirstFailure).SetCollectionValidator(new ProgramDetailsValidator1());