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

时间:2014-04-01 13:13:29

标签: c# asp.net-mvc fluentvalidation

我使用mvc4进行流畅验证

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

public List<int> TransDrops { get; set; } 

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

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

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

由于

2 个答案:

答案 0 :(得分:10)

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

public List<int?> TransDrops { get; set; } 

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

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

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

答案 1 :(得分:0)

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

RuleForEach(model => model.TransDrops)
    .NotNull()
    .WithMessage("Please fill all items");

请确保使用NotNull而不是NotEmpty,因为NotEmpty会验证类型的默认值(在本例中为int,它是0)。

您可以在documentation

中查看更多详细信息