当前项目:
- ASP。净4.5.1
- MVC 5
我需要知道我是否可以嵌套这样的When()
语句:
When(x => x.Cond1 == val1,
() => {
When(x => x.SubCond1 == SubVal1,
() => {
When(x => x.Final1 == finalVal1,
() => {
RuleFor(x => x.Field1)
.NotEmpty().WithMessage("Should not be empty");
// a few more here
});
When(x => x.Final2 == finalVal2,
() => {
RuleFor(x => x.Field8)
.NotEmpty().WithMessage("Should not be empty");
// a few more here
});
});
When(x => x.SubCond2 == SubVal2,
() => {
RuleFor(x => x.Field16)
.NotEmpty().WithMessage("Should not be empty");
// a few more here
});
});
因为我最不想做的就是像这样装饰30多个表单字段:
RuleFor(x => x.Field1)
.NotEmpty().WithMessage("Should not be empty")
.When(x => x.Cond1 == val)
.When(x => x.SubCond1 == SubVal1)
.When(x => x.Final1 == finalVal1);
这是站不住脚的。
这些条件本身都不需要验证,因为它们实际上都不是用户可编辑的字段(只是用户可选择的值);我只需要将它们与已知值进行比较。如果这实际上更合适的话,我会使用if/else语句,但事实并非如此。
该模型基本上是扁平的,只有第二级When()
表示导入的模型,第三级是处理导入模型中特定字段的不同方式。
您不能,但您可以尝试使用规则集将规则分组在一起。也可以检查级联模式。