public static void ValidDataErrorInfo(object model, Type modelType, ModelValid modelValid, string modelName = "") { IDataErrorInfo dataErrorInfo = model as IDataErrorInfo; if (dataErrorInfo == null) { return; } foreach (var propertyName in modelType.GetProperties( BindingFlags.GetProperty | BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.Public) .Select(x => x.Name)) { var errorMessage = dataErrorInfo[propertyName]; if (!String.IsNullOrWhiteSpace(errorMessage)) { modelValid.ValidResults.Add(new ValidFailure { ErrorMessage = errorMessage, ErrorMessageResourceName = propertyName, Name = modelName + "." + propertyName }); } } }
private static ModelValid GetModelValid(object model, Type modelType, string modelName) { var modelValid = new ModelValid(); ValidValidAttribute(model != null ? new ValidationContext(model) : null, model, modelType, modelValid, modelName); ValidValidatableObject(model, modelType, modelValid, modelName); ValidDataErrorInfo(model, modelType, modelValid, modelName); return(modelValid); }
private static void ValidValidatableObject(object model, Type modelType, ModelValid modelValid, string modelName) { IValidatableObject validatableObject = model as IValidatableObject; if (validatableObject == null) { return; } ValidationContext validationContext = new ValidationContext(model); foreach (var validResult in validatableObject.Validate(validationContext)) { modelValid.ValidResults.Add(new ValidFailure() { ErrorMessage = validResult.ErrorMessage, MemberNames = validResult.MemberNames, Name = modelName }); } }
private void ValidProperty(PropertyInfo property, object model, ModelValidDictionary modelValidDictionary, string modelName) { var propertyName = modelName + "." + property.Name; var validitions = property.GetCustomAttributes <ValidationAttribute>(); var modelValid = new ModelValid(); ValidValidAttribute(new ValidationContext(model), property.GetValue(model), validitions, modelValid, propertyName); if (modelValid != null && modelValid.ValidResults != null && modelValid.ValidResults.Any()) { modelValidDictionary.Add(propertyName, modelValid); } ValidateModel( modelValidDictionary, model != null ? property.GetValue(model) : null, property.PropertyType, propertyName); }
public override ModelValidDictionary Validate(object model, Type modelType, string modelName) { if (IsRequired == false) { return(null); } if (modelName == null) { modelName = ""; } ModelValidDictionary modelValidDictionary = new ModelValidDictionary(); if (modelType == null && model == null) { var validFailure = new ValidFailure() { ErrorMessage = "model与modelType都为空" }; var modelValid = new ModelValid(); modelValid.ValidResults.Add(validFailure); modelValidDictionary.Add(modelName, modelValid); return(modelValidDictionary); } if (modelType == null && model != null) { modelType = model.GetType(); } ValidateModel(modelValidDictionary, model, modelType, modelName); return(modelValidDictionary); }
private static void ValidValidAttribute(ValidationContext validationContext, object model, IEnumerable <ValidationAttribute> validations, ModelValid modelValid, string modelName) { if (validations == null || !validations.Any()) { return; } foreach (var validation in validations) { bool result = false; Exception exception = null; try { if (validationContext == null) { result = validation.IsValid(model); } else { result = validation.GetValidationResult(model, validationContext) == ValidationResult.Success; } } catch (Exception ex) { exception = ex; } if (result) { continue; } modelValid.ValidResults.Add(new ValidFailure() { ErrorMessage = validation.ErrorMessage ?? validation.ToString(), ErrorMessageResourceName = validation.ErrorMessageResourceName, ErrorMessageResourceType = validation.ErrorMessageResourceType, ErrorMessageString = validation.FormatErrorMessage(""), Exception = exception, Name = modelName }); } }
private static void ValidValidAttribute(ValidationContext validationContext, object model, Type modelType, ModelValid modelValid, string modelName) { var validations = modelType.GetCustomAttributes <ValidationAttribute>(); ValidValidAttribute(validationContext, model, validations, modelValid, modelName); }