在整数属性上使用NotEmpty进行流畅验证

时间:2011-02-02 13:36:22

标签: asp.net-mvc fluentvalidation

我有以下代码:

public class NewsEditViewDataValidator : AbstractValidator<NewsEditViewData>
{
     public NewsEditViewDataValidator()
     {
          // Status unique identifier cannot be empty
          // Status unique identifier must be greater or equal to 1
          RuleFor(x => x.StatusId)
               .NotEmpty()
               .WithMessage("Status is required")
               .GreaterThanOrEqualTo(1)
               .WithMessage("Status unique identifier must be greater or equal to 1");

          // Other rule sets
     }
}

StatusId是一个整数。 NotEmpty在这种情况下如何工作?它验证了什么?整数还是字符串?对于此部分检查整数是否为空,单元测试会是什么样的?

这用于验证我的MVC 3应用程序中的下拉列表。验证在视图上​​运行良好。 GreaterThanOrEqualTo部分是状态唯一标识符永远不会小于1.这我想触发验证我的对象。什么时候这样做NotEmpty也不会开火?是否首先要解雇哪一个?如果StatusId为0,哪个规则集将触发?如果是-1?我希望NotEmpty在检查业务对象的id时使用视图和GreaterThanOrEqualTo。有什么建议吗?

3 个答案:

答案 0 :(得分:14)

查看documentation

  

NotEmpty Validator

     

描述:确保指定的属性不为null,为空字符串或空格(或值类型的默认值,例如0为int )。

因此NotEmpty()将仅避免该属性的默认值(0)。

答案 1 :(得分:1)

我建议您下载源代码并在不确定时查看代码/测试。

  

StatusIdinteger。在这种情况下NotEmpty如何运作?   它验证了什么?

StatusId的值是其类型的默认值。 (0)

  

整数还是字符串?

StatusId的类型,int。

  

这部分检查一个单元测试的样子是什么样的   integer不是空的?

var validator = new NewsEditViewDataValidator();
validator.ShouldHaveValidationErrorFor(x => x.StatusID, 0);
  

这用于验证我的MVC 3应用程序中的下拉列表。该   验证在视图上​​运行良好。 GreaterThanOrEqualTo部分是   状态唯一标识符永远不会少于1。这就是我想要的   触发验证我的对象。什么时候这样做NotEmpty   还不开火?

使用何时或除非指定何时应该或不应该测试规则。

  

是否首先要解雇哪一个?

我相信它符合您指定的顺序。

  

如果StatusId0哪个规则集会触发?

根据您设置的级联选项,验证将在第一次出错时失败或检查属性的其他规则。

  

如果是-1

第二条规则会失败。

我希望NotEmpty在查看业务对象的ID时使用视图和GreaterThanOrEqualTo。有什么建议吗?

答案 2 :(得分:0)

@Brendan Vogt
使用NotNull()而不是NotEmpty()