代码之家  ›  专栏  ›  技术社区  ›  Ivan Korytin

流畅的验证规则上限,但没有相应的规则

  •  1
  • Ivan Korytin  · 技术社区  · 12 年前

    我有一个奇怪的问题。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:字段是必需的 ”。

    当我从Viewmodel类中删除验证属性时,我得到“ 需要一个值。 “错误。

    为什么会这样?

    1 回复  |  直到 12 年前
        1
  •  4
  •   Darin Dimitrov    12 年前

    因为您正试图将一个空字符串绑定到一个不可为null的类型。如果希望发生这种情况,请使用可为null的类型:

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

    默认情况下,有一个隐式Required属性应用于所有不可为null的类型(比如整数、日期时间、小数等)。

    顺便说一下,您可以禁用此默认行为:

    DataAnnotationsModelValidatorProvider
        .AddImplicitRequiredAttributeForValueTypes = false;