private static void Serialize(string name, PropertyValidationInfo property, StringBuilder sb)
        {
            sb.Append("#PREFIX#");
            sb.Append(name);
            sb.Append(":{");
            foreach (var attribute in property.Validators)
            {
                if (attribute is ValidateComponentAttribute)
                {
                    continue;
                }
                foreach (var kvp in attribute.ToProperties())
                {
                    sb.AppendFormat("{0}:{1},", kvp.Key, kvp.Value);
                }
            }
            var tip = property.Property.GetCustomAttributes(typeof(TipAttribute), true);

            if (tip != null && tip.Length > 0)
            {
                sb.AppendFormat("tip:'{0}'", (((TipAttribute)tip[0]).Tip).Replace("'", "\\'"));
            }
            sb.RemoveLastIf(',');
            sb.Append("},");
        }
示例#2
0
        internal static PropertyValidationInfo GetPropertyValidationInfo(ModelBindingContext bindingContext)
        {
            var validationInfo = new PropertyValidationInfo();
            var modelTypeInfo  = bindingContext.ModelType.GetTypeInfo();
            var typeAttribute  = modelTypeInfo.GetCustomAttribute <BindingBehaviorAttribute>();
            var properties     = bindingContext.ModelType.GetProperties(BindingFlags.Public | BindingFlags.Instance);

            foreach (var property in properties)
            {
                var propertyName     = property.Name;
                var propertyMetadata = bindingContext.ModelMetadata.Properties[propertyName];
                if (propertyMetadata == null)
                {
                    // Skip indexer properties and others ModelMetadata ignores.
                    continue;
                }

                var validatorProviderContext = new ModelValidatorProviderContext(propertyMetadata);
                bindingContext.OperationBindingContext.ValidatorProvider.GetValidators(validatorProviderContext);

                var requiredValidator = validatorProviderContext.Validators
                                        .FirstOrDefault(v => v != null && v.IsRequired);
                if (requiredValidator != null)
                {
                    validationInfo.RequiredValidators[propertyName] = requiredValidator;
                }

                var propertyAttribute        = property.GetCustomAttribute <BindingBehaviorAttribute>();
                var bindingBehaviorAttribute = propertyAttribute ?? typeAttribute;
                if (bindingBehaviorAttribute != null)
                {
                    switch (bindingBehaviorAttribute.Behavior)
                    {
                    case BindingBehavior.Required:
                        validationInfo.RequiredProperties.Add(propertyName);
                        break;

                    case BindingBehavior.Never:
                        validationInfo.SkipProperties.Add(propertyName);
                        break;
                    }
                }
                else if (requiredValidator != null)
                {
                    validationInfo.RequiredProperties.Add(propertyName);
                }
            }

            return(validationInfo);
        }
 private static void SerializeProperty(string chain, PropertyValidationInfo property, StringBuilder sb)
 {
     chain += property.Property.Name;
     if (property.Component == null)
     {
         Serialize(chain, property, sb);
         return;
     }
     chain += '_';
     foreach (var p in property.Component.Properties)
     {
         SerializeProperty(chain, p, sb);
     }
 }
示例#4
0
        internal static PropertyValidationInfo GetPropertyValidationInfo(ModelBindingContext bindingContext)
        {
            var validationInfo = new PropertyValidationInfo();
            var modelTypeInfo  = bindingContext.ModelType.GetTypeInfo();
            var typeAttribute  = modelTypeInfo.GetCustomAttribute <BindingBehaviorAttribute>();
            var properties     = bindingContext.ModelType.GetProperties(BindingFlags.Public | BindingFlags.Instance);

            foreach (var property in properties)
            {
                var propertyName      = property.Name;
                var propertyMetadata  = bindingContext.PropertyMetadata[propertyName];
                var requiredValidator = bindingContext.GetValidators(propertyMetadata)
                                        .FirstOrDefault(v => v.IsRequired);
                if (requiredValidator != null)
                {
                    validationInfo.RequiredValidators[propertyName] = requiredValidator;
                }

                var propertyAttribute        = property.GetCustomAttribute <BindingBehaviorAttribute>();
                var bindingBehaviorAttribute = propertyAttribute ?? typeAttribute;
                if (bindingBehaviorAttribute != null)
                {
                    switch (bindingBehaviorAttribute.Behavior)
                    {
                    case BindingBehavior.Required:
                        validationInfo.RequiredProperties.Add(propertyName);
                        break;

                    case BindingBehavior.Never:
                        validationInfo.SkipProperties.Add(propertyName);
                        break;
                    }
                }
                else if (requiredValidator != null)
                {
                    validationInfo.RequiredProperties.Add(propertyName);
                }
            }

            return(validationInfo);
        }
示例#5
0
        internal static PropertyValidationInfo GetPropertyValidationInfo(ModelBindingContext bindingContext)
        {
            var validationInfo = new PropertyValidationInfo();

            foreach (var propertyMetadata in bindingContext.ModelMetadata.Properties)
            {
                var propertyName = propertyMetadata.PropertyName;

                if (!propertyMetadata.IsBindingAllowed)
                {
                    // Nothing to do here if binding is not allowed.
                    validationInfo.SkipProperties.Add(propertyName);
                    continue;
                }

                if (propertyMetadata.IsBindingRequired)
                {
                    validationInfo.RequiredProperties.Add(propertyName);
                }
            }

            return(validationInfo);
        }
示例#6
0
        internal static PropertyValidationInfo GetPropertyValidationInfo(ModelBindingContext bindingContext)
        {
            var validationInfo = new PropertyValidationInfo();
            var modelTypeInfo = bindingContext.ModelType.GetTypeInfo();
            var typeAttribute = modelTypeInfo.GetCustomAttribute<BindingBehaviorAttribute>();
            var properties = bindingContext.ModelType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (var property in properties)
            {
                var propertyName = property.Name;
                var propertyMetadata = bindingContext.PropertyMetadata[propertyName];
                var requiredValidator = bindingContext.GetValidators(propertyMetadata)
                                                      .FirstOrDefault(v => v.IsRequired);
                if (requiredValidator != null)
                {
                    validationInfo.RequiredValidators[propertyName] = requiredValidator;
                }

                var propertyAttribute = property.GetCustomAttribute<BindingBehaviorAttribute>();
                var bindingBehaviorAttribute = propertyAttribute ?? typeAttribute;
                if (bindingBehaviorAttribute != null)
                {
                    switch (bindingBehaviorAttribute.Behavior)
                    {
                        case BindingBehavior.Required:
                            validationInfo.RequiredProperties.Add(propertyName);
                            break;

                        case BindingBehavior.Never:
                            validationInfo.SkipProperties.Add(propertyName);
                            break;
                    }
                }
                else if (requiredValidator != null)
                {
                    validationInfo.RequiredProperties.Add(propertyName);
                }
            }

            return validationInfo;
        }
        internal static PropertyValidationInfo GetPropertyValidationInfo(ModelBindingContext bindingContext)
        {
            var validationInfo = new PropertyValidationInfo();
            var modelTypeInfo = bindingContext.ModelType.GetTypeInfo();
            var typeAttribute = modelTypeInfo.GetCustomAttribute<BindingBehaviorAttribute>();
            var properties = bindingContext.ModelType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (var property in properties)
            {
                var propertyName = property.Name;
                var propertyMetadata = bindingContext.ModelMetadata.Properties[propertyName];
                if (propertyMetadata == null)
                {
                    // Skip indexer properties and others ModelMetadata ignores.
                    continue;
                }

                var validatorProviderContext = new ModelValidatorProviderContext(propertyMetadata);
                bindingContext.OperationBindingContext.ValidatorProvider.GetValidators(validatorProviderContext);

                var requiredValidator = validatorProviderContext.Validators
                    .FirstOrDefault(v => v != null && v.IsRequired);
                if (requiredValidator != null)
                {
                    validationInfo.RequiredValidators[propertyName] = requiredValidator;
                }

                var propertyAttribute = property.GetCustomAttribute<BindingBehaviorAttribute>();
                var bindingBehaviorAttribute = propertyAttribute ?? typeAttribute;
                if (bindingBehaviorAttribute != null)
                {
                    switch (bindingBehaviorAttribute.Behavior)
                    {
                        case BindingBehavior.Required:
                            validationInfo.RequiredProperties.Add(propertyName);
                            break;

                        case BindingBehavior.Never:
                            validationInfo.SkipProperties.Add(propertyName);
                            break;
                    }
                }
                else if (requiredValidator != null)
                {
                    validationInfo.RequiredProperties.Add(propertyName);
                }
            }

            return validationInfo;
        }