/// <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); }
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>>(); }