web-dev-qa-db-ja.com

Fluent Validationを使用した条件付き検証

必要なのは、他のフィールドが入力されているかどうかに応じてフィールドを条件付きで検証する方法です。

例関連するドロップダウンと日付フィールドがあります。どのフィールドも設定されていない場合、フォームは検証に合格する必要があります。ただし、2つのフィールドのいずれかが設定されていて、もう一方が設定されていない場合、検証が実行され、他のフィールドを設定する必要があります。

カスタム検証クラスを作成しましたが、単一フィールドで検証されているようです。組み込みのバリデータを使用して必要な検証を設定する方法はありますか?そうでない場合、カスタム検証ツールを使用して2つのフィールドを接続する良い方法はありますか?

63
The Sheek Geek

流validationな検証は条件付き検証をサポートしています。When句を使用して、セカンダリフィールドの値を確認するだけです。

https://fluentvalidation.net/start#conditions

When/Unlessを使用した条件の指定WhenメソッドとIflessメソッドを使用して、ルールを実行するタイミングを制御する条件を指定できます。たとえば、CustomerDiscountプロパティのこのルールは、IsPreferredCustomerがtrueの場合にのみ実行されます。

RuleFor(customer => customer.CustomerDiscount).GreaterThan(0).When(customer => customer.IsPreferredCustomer); `

Withoutメソッドは、単純にWhenの反対です。

.SetValidator操作を使用して、NotEmpty条件で動作するカスタムバリデーターを定義することもできます。

RuleFor(customer => customer.CustomerDiscount).GreaterThan(0).SetValidator(New MyCustomerDiscountValidator)

95
Denis Pitcher