C# (…读取组合)的FluentValidation规则
使用MVC3的C#FluentValidation Rulefor()检查组合是否有值的正确方法是什么 我有一套3个组合框的出生日期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
@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("...");