Gre*_*inn 11 datetime fluentvalidation
我有一个bool以及一个可以为null的DateTime属性.仅当bool设置为true时才需要DateTime ...如果bool为true,我想验证日期.
到目前为止我有这个表达...
When(p => p.HasVisa == true, () => RuleFor(p => p.VisaExpiryDate).NotNull());
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用.Must扩展名和我的自定义BeAValidDate方法验证该表达式中的日期...
When(p => p.HasVisa == true, () => RuleFor(p => p.VisaExpiryDate).NotNull().Must(BeAValidDate));
private bool BeAValidDate(DateTime date)
{
if (date == default(DateTime))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
但是.Must扩展名不允许我对可以为空的DateTime进行操作.如何在可以为空的日期进行此类验证?
谢谢
小智 20
只需添加'When'来检查对象是否为null:
RuleFor(x => x.AlternateNumber)
.Must(IsAllDigits)
.When(x => !string.IsNullOrEmpty(x.AlternateNumber))
.WithMessage("AlternateNumber should contain only digits");
Run Code Online (Sandbox Code Playgroud)
正如 Joachim 提到的,我需要对 BeAValidDate 进行重载,以接受空日期和非空日期。
private bool BeAValidDate(DateTime date)
{
if (date == default(DateTime))
return false;
return true;
}
private bool BeAValidDate(DateTime? date)
{
if (date == default(DateTime))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)