【问题标题】:Fluent Validation using NotEmpty on an integer property在整数属性上使用 NotEmpty 进行流利验证
【发布时间】:2011-02-02 13:36:21
【问题描述】:

我有以下代码:

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?在检查业务对象的 id 时,我希望 NotEmpty 使用视图和 GreaterThanOrEqualTo。有什么建议吗?

【问题讨论】:

    标签: asp.net-mvc fluentvalidation


    【解决方案1】:

    documentation

    NotEmpty 验证器

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

    所以NotEmpty() 将只避免该属性的默认值 (0)。

    【讨论】:

    • 再看我的问题。如果我将 0 传递给 ID,哪个规则将首先触发,如果有 0 则两者都会触发。我如何知道优先顺序?
    • 我会接受这个答案,但以后尝试回答一个问题而不是半个问题。
    • @Brendan Vogt:1)事实上,您的“问题”由 9 个不同的问题组成 - 至少有 7 个问题仅由上述引文回答。 2) 我不知道解析顺序,但我假设这将是您在声明规则时使用的相同顺序(并且您知道您可以调试对的?)。 3)你似乎对我的回答感到不安,这很奇怪,因为我没有任何冒犯的意思。 4) 如果我的回答没有让你满意,那么不要接受它。毕竟,这就是 SO 存在的原因——我们应该只接受我们满意的答案。
    【解决方案2】:

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

    StatusId 是一个integerNotEmpty 在这种情况下如何工作? 它验证了什么?

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

    整数还是字符串?

    StatusId 的类型,int。

    这部分的单元测试会是什么样子 integer不为空?

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

    这用于验证我的 MVC 3 应用程序中的下拉列表。这 验证在视图上​​效果很好。 GreaterThanOrEqualTo 部分是 状态唯一标识符不能小于1。这个我想要 触发以验证我的对象。什么时候这样做会NotEmpty 也不火?

    使用 when 或 unless 指定何时应该或不应该测试规则。

     对于将首先解雇哪一个有偏好吗?

    我相信它是按照您指定的顺序。

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

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

     如果是-1

    第二条规则会失败。

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

    【讨论】:

      【解决方案3】:

      @布伦丹·沃格特
      使用 NotNull() 代替 NotEmpty()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-26
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 2015-06-29
        • 1970-01-01
        相关资源
        最近更新 更多