首先,我已经尝试提出this问题的步骤。
此类Post使用流利的验证方式
public class Post
{
//...
public int? LampType { get; set; }
public int? LampModel { get; set; }
//...
}
他的流利验证。很好。
//...
RuleFor(x => x.LampType).NotNull().WithMessage(x => "LampType can't be null");
RuleFor(x => x).Must(p => LampType.Open.ID == p.LampType )
.When(p => LampModel.NoCover.ID == p.LampModel ).WithMessage(x => "A closed Lamp needs a cover");
RuleFor(x => x).Must(p => LampType.Closed.ID == p.LampType )
.When(p => LampModel.NoCover.ID != p.LampModel ).WithMessage(x => "A open Lamp can't have a cover");
//...
但是我需要对此进行更新,现在我的帖子可以有多个Lamps,所以我创建了这个:
public class newPost
{
//...
public IEnumerable<LampPostModel> Lamps { get; set; }
//...
}
public class LampPostModel
{
public int? LampType { get; set; }
public int? LampModel { get; set; }
}
我已经在PostValidation上尝试过
{
//...
RuleFor(x => x.Lamps).SetCollectionValidator(new LampValidator());
//...
}
这是新的LampValidator
{
RuleFor(x => x.LampType).NotNull().WithMessage(x => "LampType can't be null");
RuleFor(x => x).Must(p => LampType.Open.ID == p.LampType )
.When(p => LampModel.NoCover.ID == p.LampModel ).WithMessage(x => "A closed Lamp needs a cover");
RuleFor(x => x).Must(p => LampType.Closed.ID == p.LampType )
.When(p => LampModel.NoCover.ID != p.LampModel ).WithMessage(x => "A open Lamp can't have a cover");
}
但是在进行此更改后,此操作不再起作用。它拒绝第二条规则,即使不应该这样做。似乎验证正在尝试一次测试所有对象,而不是一个一个地
请求是通过类似这样的方式进行的
Lamps[
{open, nocover},
{closed, glass}
];
答案 0 :(得分:0)
似乎这个问题有点duplicated
我解决了对PostValidator这么做
RuleForEach(x => x.Lamps).SetValidator(new LampPostValidator());
LampValidator
When(p => p.LampModel== LampType.NoCover.ID, () =>
{
RuleFor(p => p).Must(p => p.LampType== LampType.Open.ID);
});
When(p => p.LampModel != LampType.NoCover.ID, () =>
{
RuleFor(p => p).Must(p => p.LampType == LampType.Closed.ID);
});