1

奇妙な問題があります。ModelState にエラーがあります。しかし、私はそれに対するルールを持っていません。バリデータファイルにフィルターもルールもありません。

私のコード。ビューモデル:

[Validator(typeof(TestValidation))]
public class PayerPayRateViewModel 
{

    public int TestId { get; set; }

    public bool AllServices { get; set; }

    public int ParentEntityId { get; set; }
}

バリデーター

 public class TestValidation : BaseEntityRepositoryValidator<Core.Domain.Model.Entities.Payer, PayerPayRateViewModel>
{
    public TestValidation()
    {
        RuleFor(x => x.ParentEntityId).Must(CheckUniqueService);
    }

    protected bool CheckUniqueService(PayerPayRateViewModel model, int value)
    {
        if (model.AllServices)
        {
            return true;
        }

        return false;          
    }      
}

値が 0 の TestId がある場合、「TestId: Field is required」が表示されます。

Viewmodel クラスから検証属性を削除すると、「値が必要です。」というエラーが表示されます。

なぜそれが起こるのですか?

4

1 に答える 1

4

空の文字列を null 非許容型にバインドしようとしているためです。これを実現したい場合は、null 許容型を使用します。

[Validator(typeof(TestValidation))]
public class PayerPayRateViewModel 
{
    public int? TestId { get; set; }

    public bool AllServices { get; set; }

    public int ParentEntityId { get; set; }
}

デフォルトでは、すべての非 null 型 (整数、日時、小数など) に適用される暗黙の Required 属性があります。

ちなみに、このデフォルトの動作を無効にすることができます:

DataAnnotationsModelValidatorProvider
    .AddImplicitRequiredAttributeForValueTypes = false;
于 2012-08-17T12:48:31.937 に答える