我想使用Foolproof验证比较两个日期字段,其中第二个字段必须大于第一个字段。但是,两者都可以为空。即使使用PassOnNull = True,当两个字段都为空时,验证也会失败。这可以使用[GreaterThanOrEqualTo]按预期工作,但我的第二个日期必须更大。
[GreaterThan("DateFrom", PassOnNull = true, ErrorMessage = "Date To must be greater than Date From")]
public DateTime? DateTo { get; set; }
在查看源代码时,当任一字段为空(但不是两者)时,它会绕过验证。这背后有什么理由吗?这对我来说并没有多大意义。我可以轻松地更改源代码,但是作为NuGet安装,我可能会被覆盖。否则,我可以手动包含它并完成。以下是源代码段:
if (passOnNull) {
var isNullish = function (input) {
return input == null || input == undefined || input == "";
};
var value1nullish = isNullish(value1);
var value2nullish = isNullish(value2);
if ((value1nullish && !value2nullish) || (value2nullish && !value1nullish))
return true;
}
以下修改对我来说在我能想到的几乎任何场景中都更有意义,因为必需的字段仍然有自己的验证通过:
if (value1nullish || value2nullish)
return true;
我应该采用另一种方式来验证这一点,还是FoolProof需要修复?
答案 0 :(得分:0)
您可以同时使用.change()
Array.prototype.every()
,.eq()
,.valueAsDate
属性input type="date"
,required
属性{{1}元素
input type="date"
var dates = $("input[type=date]");
dates.change(function(e) {
if (dates.get().every(function(el) {
return el.valueAsDate !== null
})
&& dates.eq(1)[0].valueAsDate > dates.eq(0)[0].valueAsDate) {
alert(true)
} else {
alert(false)
}
})