lek*_*kso 4 c# asp.net-mvc fluentvalidation
FluentValidation可以使用分层集合吗?是否可以验证具有任意数量的Child节点的以下对象?
public class Node
{
public string Id { get; set; }
public List<Node> ChildNodes { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
用非常简单的术语来说,我希望以下代码可以工作:
public class NodeValidator : AbstractValidator<Node>
{
public NodeValidator()
{
RuleFor(x => x.ChildNodes).SetCollectionValidator(new NodeValidator());
RuleFor(x => x.Id).NotEmpty();
}
}
Run Code Online (Sandbox Code Playgroud)
此行导致StackOverflow异常:
RuleFor(x => x.ChildNodes).SetCollectionValidator(new NodeValidator());
Run Code Online (Sandbox Code Playgroud)
如何验证深层嵌套对象的属性"Id"?
接受的答案不再是实际的。SetCollectionValidator方法已被弃用
相反,您应该使用RuleForEach和SetValidator。正确的代码是:
RuleForEach(x => x.ChildNodes).SetValidator(this);
Run Code Online (Sandbox Code Playgroud)
为了避免你的ctor中的递归,我会更正你的验证器
RuleFor(x => x.ChildNodes).SetCollectionValidator(this);
Run Code Online (Sandbox Code Playgroud)
我试了一下,它似乎正确地检索了验证错误,但是......我告诉你,这是否真的是你需要的.