FluentValidation允许null还是指定长度?

时间:2015-11-20 15:28:36

标签: fluentvalidation

我有这样的规则:

RuleFor(m => m.Title).Length(1, 75);

但是,如果Title为null,我仍然会得到验证,说明标题长度必须介于1到75个字符之间,您输入的是0.

如何更改规则以允许空标题,但如果指定了一个,则必须介于1到75个字符之间?感谢。

2 个答案:

答案 0 :(得分:10)

我在这里做了一些假设,但我猜你的标题不是null而是string.Empty。您可以通过执行以下操作向任何规则添加特定子句:

public class Thing
{
    public string Title { get; set; }
}

public class ThingValidator : AbstractValidator<Thing>
{
    public ThingValidator()
    {
        this.RuleFor(s => s.Title).Length(1, 75).When(s => !string.IsNullOrEmpty(s.Title));
    }
}

答案 1 :(得分:2)

正如Yannick Meeus在上面的帖子中所建议的,我们需要添加'When'条件来检查not null。 它解决了这个问题。 在这里,我想允许电话号码为空,但如果指定,则它应该只包含数字。

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