1

MVC3 の C# FluentValidation Rulefor() を使用して Combo に値があるかどうかを確認する正しい方法は何ですか??

3つのコンボボックスの生年月日セットがあります

    @Html.DatePickerDropDowns(Html.FieldNameFor(x => x.DateOfBirthDay),
                              Html.FieldNameFor(x => x.DateOfBirthMonth),
                              Html.FieldNameFor(x => x.DateOfBirthYear),
                                 DateTime.Now.Year - 110,
                                 DateTime.Now.Year,
                                 Model.DateOfBirthDay,
                                 Model.DateOfBirthMonth,
                                 Model.DateOfBirthYear)

    @Html.ValidationMessageFor(model => model.DateOfBirthDay)
    @Html.ValidationMessageFor(model => model.DateOfBirthMonth)
    @Html.ValidationMessageFor(model => model.DateOfBirthYear)

各コンボには「日」または「月」または「年」が表示され
、それぞれに関連リストがあります。

したがって、ユーザーが 0..31 のいずれかの値を選択したかどうかを確認したいと思います。

   RuleFor(x => x.DateOfBirthDay).NotEqual(0).WithMessage("Day is required");
   RuleFor(x => x.DateOfBirthMonth).NotEqual(0).WithMessage("Month is required");
   RuleFor(x => x.DateOfBirthYear).NotEqual(0).WithMessage("Year is required");

たとえば、DateOfBirthDay HTML 出力コンボは次のようになります。

  "0" - Day  
  "1" - 1  
  "2" - 2  
   ...till 31  

ModelState.IsValid を実行すると、ユーザーがコンボ値に触れていないという事実が検出されず、インデックスが「0」のままになります。

ありがとうございます。

4

2 に答える 2

3

「DatePickerDropdowns」が何であるかはわかりませんが、FluentValidation にはこの場合の特別なロジックがあります。.NotEmpty() を使用し、Day を 0 に設定する代わりに、空白のままにします。デフォルトの DropDownListFor を使用して、オプション パラメータを「Day」に設定すると、これが自動的に行われます。

DatePickerDropDowns ヘルパーを作成しましたか? 私はこのように実装しなかったでしょう。単一の DateTime を使用してから、このタイプの 3 つのドロップダウンを作成する EditorTemplate を作成します (これが唯一の DateTime である場合は、UIHint を使用してカスタム テンプレートを指定します)。

于 2011-12-15T23:47:09.963 に答える
0

//このようなものは機能しますか..?私はあなたがそれが「...」に等しいかどうか探していると思いますか?

string somestring = new string('.',3);
this.RuleFor(x => x.MyComboList).Equals(somestring);

//また

this.RuleFor(x => x.MyComboList).NotEqual(0).WithMessage("..."); 
于 2011-12-15T21:00:08.830 に答える