2011-02-09 9 views
4

私はASP.NET MVC 3アプリケーションでFluentValidationを使用しています。FluentValidation on number issue

私のような私の見解モデルでMaxNumberTeamMembersプロパティを持っている:

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

私は、次のルールセットが可能であるかどうかを知りたい:フロントエンドビューで

  • 、テキストボックスがある場合空の場合は、 "MaxNumberTeamMembers is required"メッセージを表示します。
  • 入力された数字が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"); 

はUPDATE 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"); 

答えて

5

あなたがしたい場合は 空の場合ケースでは、モデルにヌル可能な整数が必要です。そうでないと、空の文字列を解析しようとすると自動的に検証エラーが追加されるデフォルトのモデルバインダーになるためですnull非許容整数にする:

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"); 


UPDATE:

を次の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"); 
+0

との仕事で、それが正常に動作しますが、あなたの方法は良いですか? –

+0

これは、ユーザーがテキストボックスに数値を入力するだけで、正規表現をどのように追加できますか?これはどんな方法でも可能ですか? –

+0

@ダリン:最新の投稿をご覧ください。 –

0

それは私がint私の財産を守って、私はNOTNULLでNotEmptyを置き換えFluentValidationバージョン3.2

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