Is it possible to override the required attribute on a property in a model?

后端 未结 5 1449
迷失自我
迷失自我 2020-12-06 04:35

I\'m curious to find out if it is possible to override the [Required] attribute that has been set on a model. I\'m sure there most be a simple solution to this problem, any

5条回答
  •  没有蜡笔的小新
    2020-12-06 05:00

    You can use a custom validation attribute (it might be derived from RequiredAttribute):

     public class RequiredExAttribute : RequiredAttribute
        {
            public bool UseRequiredAttribute { get; protected set; }
            public RequiredExAttribute(bool IsRequired)
            {
                UseRequiredAttribute = IsRequired;
            }
            public override bool IsValid(object value)
            {
                if (UseRequiredAttribute)
                    return base.IsValid(value);
                else
                {
                    return true;
                }
            }
    
            public override bool RequiresValidationContext
            {
                get
                {
                    return UseRequiredAttribute;
                }
            }
        }
    
        public class RequiredExAttributeAdapter : RequiredAttributeAdapter
        {
            public RequiredExAttributeAdapter(ModelMetadata metadata, ControllerContext context, RequiredExAttribute attribute)
                : base(metadata, context, attribute) { }
    
            public override IEnumerable GetClientValidationRules()
            {
                if (((RequiredExAttribute)Attribute).UseRequiredAttribute)// required -> return normal required rules
                    return base.GetClientValidationRules();
                else// not required -> return empty rules list
                    return new List();
            }
        }
    

    and then regester it in Application_Start using this code line:

     DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(RequiredExAttribute), typeof(RequiredExAttributeAdapter));
    

提交回复
热议问题