0

我有一组电话号码,并不是每个人都有一个。我如何指定三个满足中的任何一个都足够好:

RuleFor(p => p.PhoneHome).Matches(Regexes.TenDigitsOnly).WithMessage("Phone numbers must have only ten digits.");
RuleFor(p => p.PhoneWork).Matches(Regexes.TenDigitsOnly).WithMessage("Phone numbers must have only ten digits.");
RuleFor(p => p.PhoneCell).Matches(Regexes.TenDigitsOnly).WithMessage("Phone numbers must have only ten digits.");
4

3 回答 3

1

您可以为验证设置一个属性并使用该Must方法应用它。

RuleFor(p => p.PhoneHome)
    .Matches(Regexes.TenDigitsOnly).WithMessage("Phone numbers must have only ten digits.")
    .Must((person, phone) => ValidatePhones(person, phone))..WithMessage("Please add a phone number.");

RuleFor(p => p.PhoneWork)
    .Matches(Regexes.TenDigitsOnly).WithMessage("Phone numbers must have only ten digits.")
    .Must((person, phone) => ValidatePhones(person, phone))..WithMessage("Please add a phone number.");

RuleFor(p => p.PhoneCell)
    .Matches(Regexes.TenDigitsOnly).WithMessage("Phone numbers must have only ten digits.")
    .Must((person, phone) => ValidatePhones(person, phone))..WithMessage("Please add a phone number.");




private bool ValidatePhones(Person person, string phone) {
    return !string.IsNullOrEmpty(person.PhoneHome) || !string.IsNullOrEmpty(person.PhoneWork) || !string.IsNullOrEmpty(PhoneCell);
}

看看自定义验证: http: //fluentvalidation.codeplex.com/wikipage?title= Custom

于 2013-01-21T16:19:54.930 回答
1

您应该使用业务规则引擎并停止主代码中的硬编码逻辑。从长远来看,MS MVC 的验证框架导致的问题多于它解决的问题。例如,你的这条规则明天肯定会改变。您必须重建和重新部署整个应用程序才能更改一个简单的规则。

我发布这个知道我会从 MVC 顽固分子那里得到很多嘘声和降级。

于 2013-01-21T16:28:25.590 回答
0

设置一个自定义验证器,它接受模型本身,而不仅仅是它的属性:http: //fluentvalidation.codeplex.com/wikipage?title=Custom

于 2013-01-21T16:17:37.980 回答