FluentValidation - 仅当NOT NULL时,检查值才是日期

时间:2013-05-25 06:45:26

标签: datetime fluentvalidation

我有一个bool以及一个可以为null的DateTime属性。 仅当bool设置为true时才需要DateTime ... 如果bool是真的,我想验证日期。

到目前为止我有这个表达......

When(p => p.HasVisa == true, () => RuleFor(p => p.VisaExpiryDate).NotNull());

现在我尝试使用.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;
}

但是.Must扩展名不允许我对可以为空的DateTime进行操作。 如何在可以为空的日期进行此类验证?

由于

3 个答案:

答案 0 :(得分:12)

只需添加'When'来检查对象是否为null:

RuleFor(x => x.AlternateNumber)
    .Must(IsAllDigits)
    .When(x => !string.IsNullOrEmpty(x.AlternateNumber))
    .WithMessage("AlternateNumber should contain only digits");

答案 1 :(得分:1)

为我工作:

RuleFor(user => user.DateOfBirth)
  .Must(p=> !(p == DateTime.MinValue))
  .WithMessage("DateTime not null");

答案 2 :(得分:0)

正如Joachim所说,我需要为BeAValidDate提供重载,同时接受null和非null日期。

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;
}