15

エラーが発生しました:

目立たないクライアント検証ルールの検証タイプ名は一意である必要があります。次の検証タイプが複数回検出されました: 必須。次の検証タイプが複数回検出されました: 必須

サーバー検証を使用しました。そして、すべてうまくいきました。しかし今、私はクライアント側の検証を使用すると述べていますが、この問題が発生しました。

これは私の検証クラスのコードです:

public class TestViewDataValidation : BaseTestCreateViewDataValidation<BaseTestCreateViewData>
    {

public TestViewDataValidation ()
        {
            this.RuleFor(x => x.Login).NotNull();
            this.RuleFor(x => x.Login).NotEmpty();
            this.RuleFor(x => x.Login).EmailAddress();          
        }
}

しかし、1 つのバリデータを残すと、すべて正常に動作します。フィールドに対して複数の検証を行うにはどうすればよいですか。

4

2 に答える 2

28

このエラーは、同じ要素に対して同じ検証を複数回行った場合に表示されます。

AddImplicitRequiredAttributeForValueTypes = falseデフォルトの DataAnnonationsFluentValidation の両方を設定しないと、任意の ValueTypes ( などint) に必須の検証が追加されます。[Required]任意の ValueType に RuleFor (または属性) を同時に追加すると、そのフィールドに追加の Required が追加されます。

そのため(すべての検証を明示的に設定したい)、 my に次のものがありますApplication_Start()

var fluentValidationModelValidatorProvider = new FluentValidationModelValidatorProvider(new AttributedValidatorFactory());
ModelValidatorProviders.Providers.Add(fluentValidationModelValidatorProvider);
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
fluentValidationModelValidatorProvider.AddImplicitRequiredValidator = false;
于 2011-04-05T13:01:23.997 に答える
17

FluentValidation.NETメソッドをチェーンするための流暢なインターフェースを提供するため、Fluentと呼ばれます。

public TestViewDataValidation()
{
    RuleFor(x => x.Login)
        .NotNull()
        .NotEmpty()
        .EmailAddress();
}

注意:この場合、 NotNullandNotEmptyルールの使用は冗長に思えます。NotEmpty十分なはずです。

于 2011-01-22T14:14:23.777 に答える