FluentValidation Rulefor( ...reading a COMBO)
本文关键字:COMBO reading Rulefor FluentValidation | 更新日期: 2023-09-27 18:17:55
使用c# FluentValidation Rulefor() for MVC3检查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。如果是有效的,它不会选择用户没有触摸任何组合值的事实,将索引保留为"0"。
我不确定"DatePickerDropdowns"是什么,但是FluentValidation对于这种情况有特殊的逻辑。使用. notempty(),而不是将Day设置为0,而是将其保留为空。使用默认的DropDownListFor,你可以将选项参数设置为"Day",这将自动发生。
你写了DatePickerDropDowns帮助吗?我就不会这样做了。我将使用单个DateTime,然后创建一个EditorTemplate,为该类型创建3个下拉(如果它是唯一的DateTime,否则使用UIHint指定自定义模板)。//像这样的东西会工作吗?我假设你在看它是否等于"…"
?string somestring = new string('.',3);
this.RuleFor(x => x.MyComboList).Equals(somestring);
//
this.RuleFor(x => x.MyComboList).NotEqual(0).WithMessage("...");