gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:45:53 26 4
gpt4 key购买 nike

我正在尝试使用流畅的验证。希望针对 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"));

}
}

调用该行时返回的错误是“嵌套验证器只能与成员表达式一起使用。”

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

最佳答案

错误原因

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

验证集合

创建包含列表的对象:

public class MyObject
{
public List<Item> Items { get; set; }
}

您可以使用泛型为所有列表创建 1 个通用对象和验证器。

public class MyObjectValidator : AbstractValidator<MyObject>
{
public MyObjectValidator()
{
RuleFor(x => x.Items) // will work, because it is not "x => x"
.SetCollectionValidator(new ItemValidator());
}
}

验证对象

使用指向成员的 lambda 表达式来验证内部对象,并使用对象验证器的继承来验证根 x

public class MySimpleObject { ... }

public class MyCompositeObject : MySimpleObject
{
public MyType1 MySubobject1 { get; set; }
public MyType2 MySubobject2 { get; set; }
}
public class MySimpleObjectValidator : AbstractValidator<MySimpleObject>
{
public MySimpleObjectValidator()
{
...
}
}

public class MyCompositeObjectValidator : MySimpleObjectValidator
{
public MyCompositeObjectValidator () : base() // Call base validator to implement rules for "x => x" written in MySimpleObjectValidator!
{
// Rules for SUBobjects will work
RuleFor(x => x.MySubobject1)
.SetValidator(new MyType1Validator())
.WithName("Subobject1's errors group");

RuleFor(x => x.MySubobject2)
.SetValidator(new MyType2Validator())
.WithName("Subobject2's errors group");
}
}

关于validation - 嵌套验证器只能与成员表达式一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41149479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com