예제 #1
0
        public static ModelStateDictionary ValidateObject(object objectValue)
        {
            //0. here we could use reflection but we know for sure it will return modelState!
            var modelState = new ModelStateDictionary();

            var objectProperties = objectValue.GetType().GetProperties();

            //1st get the props

            foreach (var objectProperty in objectProperties)
            {
                //2.1. in each prop, we get only the validation attributes
                //2.2. we cast each OBJECT ATTRIBUTE to the attribute we NEED (vlidationattribute, because we`ll use the is valid method!)
                var validationAttributes = objectProperty
                                           .GetCustomAttributes(typeof(ValidationSisAttribute), true)
                                           .Cast <ValidationSisAttribute>()
                                           .ToList();

                //от тук надолу, вече почваш да губиш връзката!
                //3. вземаш prop-a и му казваш да си покаже стойността с obj  (забравяш, че винаги трябва да имаш инстанция, за да видиш,
                //1 Prop, каква му е стойността. (то няма логика другояче, ама както и да е.
                foreach (var validationAttribute in validationAttributes)
                {
                    //4. тук , вместо да изписваме false/true, ще събраме информация за съобщения, когато са false само!

                    if (validationAttribute.IsValid(objectProperty.GetValue(objectValue)))
                    {
                        continue;
                    }


                    //5.1. we make it false , becaues it contains at least one error!

                    modelState.IsValid = false;
                    modelState.AddMessage(objectProperty.Name, validationAttribute.ErrorMessage);
                    //5.2. => all that is left is to add the validationAttributes in the inputModels!
                }
            }

            return(modelState);
        }