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