5

Fluent Validationのための控えめなカスタム検証を実装する方法を探しています。 documentationによれば、控えめな検証をサポートしているとは思われません。Fluent Validationによる妥協のないカスタム/条件付き検証

条件付き検証(When/Unless)を使用する場合も同じです。 FluentValidationもASP.NET MVCのクライアント側の検証では動作しますが、すべてのルールがサポートされていないことを

注:私は、条件やその他の複雑な検証ではサポートされていない彼らのMVC documentation、控えめな検証で参照してください。たとえば、条件(When/Unless)、カスタムバリデーター、またはMustへの呼び出しを使用して定義されたルールは、クライアント側では実行されません。以下のバリデータは、クライアントでサポートされています。

* NOTNULL/NotEmpty
*マッチ(正規表現)
* InclusiveBetween(範囲)
*のCreditCard
*メール
* EqualTo(クロスプロパティの等価比較)
*長さ

これを行う方法を知りましたか?そうでない場合は、控えめなカスタム/複合検証のためのより良いサポートを提供する他の検証オプションがありますか?

+0

達成/検証しようとしていることの具体例を教えてください。あなたの正確なシナリオは何ですか? –

+0

さて、When/Unlessメソッドは、目立たないように、とにかくそのままでは動作しません。たとえ私がそれらのために働く解決策を見つけることができたとしても、それは私を一歩近づけるでしょう。おそらく、When/Unlessのような条件付きで動作すると、おそらくカスタム検証と一緒に動作するでしょう。 –

答えて

1

Integration with ASP.NET MVCドキュメントに従って、FluentValidationをASP.NET MVC 3に正常に接続しました。

簡単な方法は、次のように)のGlobal.asaxのApplication_Start(中MVCの検証フレームワークにFluentValidationをプラグインすることである。

FluentValidationModelValidatorProvider.Configure(); 

その後、あなたは彼らが使用するバリデータを指定し、属性を持つあなたのPOCOクラスを飾ることができます。私の場合は

[Validator(typeof(PersonValidator))] 
public class Person { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public int Age { get; set; } 
} 

、私は(使用属性)ということをしたい、と実際にビジネスルールに応じて、異なるバリデータに対して同じPOCOクラスを検証するために必要としませんでした。

このように異なるバリデータを選択する場合は、 "custom validator factory with an IoC container"のドキュメントに従ってください。インタフェースIValidatorFactoryを実装するValidatorFactoryBaseをサブクラス化するFluentMvcValidatorFactoryクラスを作成します。カスタムバリデータファクトリは、適切なバリデータの選択を処理できます。

私はクライアント側の検証を実行しようとしていましたが、それは目立たない検証にもつながっているようです。私のHTMLは次のように出力されます:

<input type="text" value="" name="Email" id="Email" data-val-length-max="128" data-val-length="&amp;#39;Email&amp;#39; must be between 0 and 128 characters." data-val-email="&amp;#39;Email&amp;#39; is not a valid email address." data-val="true" class="text-box single-line"> 

MVCに正しくプラグインしている限り、邪魔にならないと思います。

実際には、クライアントサイドまたは邪魔にならない検証に完全に依存する必要はなく、入力中にユーザーを支援するためにのみ使用してください。最終的にサーバーの検証が必要ですが、サーバー側のコードで同じFluentValidationバリデーターを使用することができます。

+1

あなたの投稿をありがとう。私は実際に標準検証が邪魔にならず、問題はWhen/Unless条件付き検証を有効にするか、カスタム検証(どこで自分の検証ルールを作成するか)を得ています。 –

+0

FluentValidationを使用してカスタム検証ルール(条件文)を定義し、それらのルールをクライアント側の検証用のカスタムjquery.unobtrusive.validationルールに変換する必要があります。それはサポートされていないものです。そのため、ギャップを埋めるためにカスタムコードが必要になります。サーバーのポストではなく、クライアント側でカスタムルールを持つことの重要性はどれですか?たぶんそれは過度だ。 FluentValidationを使用する理由の1つは、コードを少なく書くことです。クライアントとサーバーで同じ検証ルールを使用することです。 –

+1

私は同意します。ただし、一部のフィールドの確認が必要なケースは多いです(「請求と同じ」チェックボックスがオフの場合)。私にとって、これは一般的な要件のようだ、あなたが言ったように、私は、これらのWhen/Unless条件では控えめな検証が機能しないので、これに対して別の検証を書く必要はありません。 –