7

FluentValidationの目立たないカスタム検証を実装する方法を探しています。ドキュメントによると、目立たない検証をサポートしていることを示しているようには見えません。

同じことが条件付き検証の使用にも当てはまります(When / Unless)。彼らのMVCドキュメントを見ると、控えめな検証は条件付きおよびその他の複雑な検証ではサポートされていません。

FluentValidationはASP.NETMVCのクライアント側の検証でも機能しますが、すべてのルールがサポートされているわけではないことに注意してください。たとえば、条件(When / Unlessを使用)、カスタムバリデーター、またはMustの呼び出しを使用して定義されたルールは、クライアント側では実行されません。クライアントでは、次のバリデーターがサポートされています。

* NotNull / NotEmpty
* Matches(regex)
* InclusiveBetween(range)
* CreditCard
* Email
* EqualTo(クロスプロパティの同等性の比較)
* Length

それで、これを機能させる方法を誰かが理解しましたか?そうでない場合、目立たないカスタム/複雑な検証をより適切にサポートする他の検証オプションはありますか?

4

1 に答える 1

1

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

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

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 クラスを検証する必要がありました。

そのように異なるバリデーターを選択したい場合は、「IoC コンテナーを使用したカスタムバリデーターファクトリー」のドキュメントに従ってください。インターフェース 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 バリデーターを使用することができます。

于 2012-06-15T19:54:14.383 に答える