我想使用万无一失的验证比较两个日期字段,其中第二个字段必须大于第一个字段。但是,两者都可以为空。即使使用 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 只需要修复?