流畅的验证收集项目不为空/空

rak*_*los 8 c# asp.net-mvc fluentvalidation

我使用mvc4进行流畅验证

在我的模型中,我有一个列表:

public List<int> TransDrops { get; set; } 
Run Code Online (Sandbox Code Playgroud)

在视图中我为列表中的每个项目创建文本框.

我想随后确保填写每个字段.(不是空/空)

OrderDetailsViewModelValidator是模型的验证器,我需要什么?

谢谢

Evg*_*vin 11

首先,您必须为集合项使用可空整数类型,否则空文本框将绑定为零值,这使得无法区分空文本框和填充零.

public List<int?> TransDrops { get; set; } 
Run Code Online (Sandbox Code Playgroud)

接下来,使用谓词验证器(必须规则):

RuleFor(model => model.TransDrops)
    .Must(collection => collection == null || collection.All(item => item.HasValue))
    .WithMessage("Please fill all items");
Run Code Online (Sandbox Code Playgroud)

如果您需要阻止成功验证空集合,只需NotEmpty()在谓词验证器之前添加规则:它会检查任何IEnumerable不是null,并且至少有1个项目.

  • 您还应该防止列表为空和空。 (2认同)

Yit*_*ade 11

现在有一个更简单的方法,使用RuleForEach

RuleForEach(model => model.TransDrops)
    .NotNull()
    .WithMessage("Please fill all items");
Run Code Online (Sandbox Code Playgroud)

确保使用NotNulland not NotEmpty,因为 NotEmpty 验证类型的默认值(在本例中:int,它是 0)。

您可以在文档中查看更多详细信息