C# (…读取组合)的FluentValidation规则

C# (…读取组合)的FluentValidation规则,c#,asp.net-mvc-3,validation,fluentvalidation,C#,Asp.net Mvc 3,Validation,Fluentvalidation,使用MVC3的C#FluentValidation Rulefor()检查组合是否有值的正确方法是什么 我有一套3个组合框的出生日期 @Html.DatePickerDropDowns(Html.FieldNameFor(x => x.DateOfBirthDay), Html.FieldNameFor(x => x.DateOfBirthMonth), H

使用MVC3的C#FluentValidation Rulefor()检查组合是否有值的正确方法是什么

我有一套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”


高级版谢谢。

//您喜欢这部作品吗。。?我假设你在看它是否等于“…”

//或

我不确定“DatePickerDropdowns”是什么,但FluentValidation对这种情况有特殊的逻辑。使用.NotEmpty()并将Day设置为0,而不是将其留空。使用默认的DropDownListFor,您可以将选项参数设置为“Day”,这将自动发生


您是否编写了DatePickerDropDowns助手?我不会以这种方式实施它。我会使用一个DateTime,然后创建一个EditorTemplate,为这种类型创建3个下拉列表(如果它是唯一的DateTime,否则使用UIHint指定一个自定义模板)。

不太可能,第一个项目是硬编码的,看起来像“Day”.我需要看看实际无效字符串是什么,为什么不创建一个string[]数组。。如果我看到的是没有“…”的东西,它看起来像是一个硬编码的字符串。对不起,这是我正在使用的开放源代码的一部分,但我可能只是将其更改为标准方式(如您所述)。谢谢
string somestring = new string('.',3);
this.RuleFor(x => x.MyComboList).Equals(somestring);
this.RuleFor(x => x.MyComboList).NotEqual(0).WithMessage("...");