Beispiel #1
0
        /// <summary>
        /// Returns model validation metadata of type <typeparamref name="TValidationMetadata"/> associated with this <paramref name="item"/>.
        /// New validation will be created if no one is found.
        /// </summary>
        /// <param name="item"></param>
        /// <typeparam name="TValidationMetadata"></typeparam>
        /// <returns>Model validation metadata of type <typeparamref name="TValidationMetadata"/></returns>
        public static TValidationMetadata GetValidationOrCreateNew <TValidationMetadata>(this ModelMetadataItem item)
            where TValidationMetadata : class, IModelValidationMetadata, new()
        {
            TValidationMetadata validation = item.GetValidation <TValidationMetadata>();

            if (validation == null)
            {
                validation = new TValidationMetadata();
                item.Validations.Add(validation);
            }

            return(validation);
        }
Beispiel #2
0
        private static void SyncValidations([NotNull] ModelMetadataItem metadataFrom, [NotNull] ModelMetadataItem metadataTo)
        {
            if (metadataFrom.Validations.Count > 0)
            {
                var types = new HashSet <Type>();
                foreach (var metadata in metadataTo.Validations)
                {
                    var type = metadata.GetType();
                    if (!types.Contains(type))
                    {
                        types.Add(type);
                    }
                }

                //TODO: how about Deleged validation? just rewrite it completely?

                foreach (var validation in metadataFrom.Validations)
                {
                    if (!types.Contains(validation.GetType()))
                    {
                        metadataTo.Validations.Add(validation);
                    }
                }
            }

            if (metadataTo.IsRequired == null && metadataFrom.IsRequired.HasValue && metadataFrom.IsRequired.Value)
            {
                metadataTo.IsRequired = metadataFrom.IsRequired.Value;
            }

            // ensure that Required attribute is removed
            if (metadataFrom.IsRequired.HasValue && !metadataFrom.IsRequired.Value)
            {
                var requiredValidation = metadataTo.GetValidation <RequiredValidationMetadata>();
                if (requiredValidation != null)
                {
                    metadataTo.Validations.Remove(requiredValidation);
                }
                metadataTo.IsRequired = false;
            }
        }
 private ModelValidationMetadata FindRangeMetadata(ModelMetadataItem property)
 {
     return (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<int>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<sbyte>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<short>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<long>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<uint>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<byte>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<ushort>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<ulong>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<float>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<double>>()
         ?? (ModelValidationMetadata)property.GetValidation<RangeValidationMetadata<decimal>>();
 }