0

私は一連の電話番号を持っていますが、すべての人がこれらの番号を 1 つずつ持っているわけではありません。3 つのいずれかが満たされていれば十分であると指定するにはどうすればよいですか。

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 の検証フレームワークは、長期的には解決するよりも多くの問題を引き起こします。たとえば、あなたのこのルールは、明日には確実に変わる可能性があります。単純なルールを 1 つだけ変更するには、アプリ全体を再構築して再デプロイする必要があります。

私は、MVC の頑固者から多くのブーイングとダウングレードを受けることを知って、これを投稿しています。

于 2013-01-21T16:28:25.590 に答える
0

モデルのプロパティだけでなく、モデル自体を取り込むカスタム バリデーターをセットアップします: http://fluentvalidation.codeplex.com/wikipage?title=Custom

于 2013-01-21T16:17:37.980 に答える