【问题标题】:FluentValidation on number issue关于号码问题的 FluentValidation
【发布时间】:2011-02-09 11:53:57
【问题描述】:

我在我的 ASP.NET MVC 3 应用程序中使用 FluentValidation。

我的视图模型中有一个 MaxNumberTeamMembers 属性:

/// <summary>
/// Gets or sets the maximum number of team members.
/// </summary>
public int MaxNumberTeamMembers { get; set; }

我想知道以下规则集是否可行:

  • 在前端视图中,如果文本框为空,则我希望显示“需要 MaxNumberTeamMembers”消息
  • 如果输入的数字小于 1,那么我希望显示一条消息“MaxNumberTeamMembers 应该大于或等于 1”。

上面的规则集是什么样的?

我有以下内容,但如果我输入 0,它在 GreaterThan 部分不起作用:

RuleFor(x => x.MaxNumberTeamMembers)
     .NotEmpty()
     .WithMessage("Max. number of team members is required")
     .GreaterThan(0)
     .WithMessage("Max. number of team members must be greater than 0");

2011-02-14 更新:

RuleFor(x => x.MinNumberCharactersCitation)
   .NotNull()
   .WithMessage("Min. number of characters for citation is required")
   .GreaterThanOrEqualTo(1)
   .WithMessage("Min. number of characters for citation must be greater than or equal to 1")
   .LessThanOrEqualTo(x => x.MaxNumberCharactersCitation)
   .WithMessage("Min. number of characters must be less than or equal to max. number of characters");

【问题讨论】:

    标签: asp.net-mvc validation asp.net-mvc-3 fluentvalidation


    【解决方案1】:

    如果你想处理 empty 的情况,你的模型需要一个可为空的整数,否则它是默认的模型绑定器,它会在尝试解析空字符串到不可为空的整数:

    public int? MaxNumberTeamMembers { get; set; }
    

    然后你可以在这个属性上有以下验证规则:

    RuleFor(x => x.MaxNumberTeamMembers)
        .NotEmpty()
        .WithMessage("Max. number of team members is required")
        .Must(x => x.Value > 0)
        .When(x => x.MaxNumberTeamMembers != null)
        .WithMessage("Max. number of team members must be greater than 0");
    


    更新:

    以下内容适用于最新版本的 FluentValidation:

    RuleFor(x => x.MaxNumberTeamMembers)
        .NotNull()
        .WithMessage("Max. number of team members is required")
        .GreaterThan(0)
        .WithMessage("Max. number of team members must be greater than 0");
    

    【讨论】:

    • 我将我的属性保留为 int,并将 NotEmpty 替换为 NotNull,它工作正常,但你的方法更好吗?
    • 如何添加正则表达式,以便用户只在文本框中输入数值?这有可能吗?
    • @Brendan Vogt,您是对的,使用最新版本的 FluentValidation,您不再需要将您的属性设为可为空的整数,并且 NotNull 和 NotEmpty 都应该可以工作。就正则表达式而言,恐怕它只适用于字符串类型的属性,它不能用整数值来完成。
    • 酷。我将如何添加一个正则表达式来检查是否只允许在文本框中输入数字? FV 可以做到这一点,还是我需要使用 jQuery 之类的东西?当我在这个文本框中输入一个字母时,它会显示一条默认消息,不确定它来自哪里。理想情况下,我想验证使用正则表达式输入的这个值(如果可能的话)并向用户显示我自己的消息。
    • @Brendan Vogt,这不是 fluent 验证框架的限制。这是 ASP.NET MVC 的作品。默认模型绑定器在验证器之前运行,当它遇到 int 类型的属性时,它会尝试解析请求中的值,如果失败则添加模型错误。
    【解决方案2】:

    它适用于 FluentValidation 3.2 版

    RuleFor(x => x.MaxNumberTeamMembers)
        .NotNull()
        .WithMessage("Please Enter Value")
        .InclusiveBetween(1, 500)
        .WithMessage("Value must be number Beetween 1 , 500"); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多