예제 #1
0
        private void HandleValidationAttributes(T dto, ModelBindingContext bindingContext)
        {
            var dtoProperties = dto.GetType().GetProperties();

            foreach (var property in dtoProperties)
            {
                // Check property type
                BaseValidationAttribute validationAttribute = property.PropertyType.GetCustomAttribute(typeof(BaseValidationAttribute)) as BaseValidationAttribute;

                // If not on property type, check the property itself.
                if (validationAttribute == null)
                {
                    validationAttribute = property.GetCustomAttribute(typeof(BaseValidationAttribute)) as BaseValidationAttribute;
                }

                if (validationAttribute != null)
                {
                    validationAttribute.Validate(property.GetValue(dto));
                    Dictionary <string, string> errors = validationAttribute.GetErrors();

                    if (errors.Count > 0)
                    {
                        foreach (var error in errors)
                        {
                            bindingContext.ModelState.AddModelError(error.Key, error.Value);
                        }
                    }
                }
            }
        }
예제 #2
0
        private void ValidateAttribute(ModelBindingContext bindingContext, BaseValidationAttribute validator, object value)
        {
            validator.Validate(value);
            var errors = validator.GetErrors();

            if (errors.Count > 0)
            {
                foreach (var error in errors)
                {
                    bindingContext.ModelState.AddModelError(error.Key, error.Value);
                }
            }
        }
 public void FormatPropertyForClientValidation()
 {
     BaseValidationAttribute.FormatPropertyForClientValidation(null);
 }
예제 #4
0
    /// <summary>
    /// Get the message from the provided property for the provided attribute type.
    /// </summary>
    protected string GetAttributeMessage(System.Reflection.PropertyInfo property, Type attributeType)
    {
        BaseValidationAttribute attribute = (BaseValidationAttribute)Attribute.GetCustomAttribute(property, attributeType);

        return(attribute.Message);
    }
        public virtual List <T> DataTableToList <T>(string filePath, string sheetName) where T : IExeclImport, new()
        {
            List <T>  listEntity = new List <T>();
            DataTable dt         = excelReader.ReaderExcel(filePath, sheetName);

            if (dt.Rows.Count > this.MaxLeng)
            {
                this.ErrorMsg = $"超过最大条数{MaxLeng}";
                return(null);
            }
            string TName = GetTName <T>();

            #region 获取实体类映射集合
            string ExeclMappingPropertyInfosKey      = $"{TName}_ExeclMappingPropertys";
            IEnumerable <PropertyInfo> PropertyInfos = CacheHelper.GetCache <IEnumerable <PropertyInfo> >(ExeclMappingPropertyInfosKey);
            if (PropertyInfos == null)
            {
                PropertyInfos = typeof(T).GetProperties().Where(m => m.GetCustomAttributes(typeof(ExeclMappingAttribute), true) != null);
                if (PropertyInfos != null)
                {
                    CacheHelper.SetCache(ExeclMappingPropertyInfosKey, PropertyInfos);
                }
            }
            #endregion

            if (PropertyInfos == null || PropertyInfos.Count() <= 0)
            {
                this.ErrorMsg = $"传入实体无Execl映射信息";
                return(null);
            }
            foreach (DataRow row in dt.Rows)
            {
                T t = new T();
                foreach (PropertyInfo Prty in PropertyInfos)
                {
                    #region 获取指定字段ExeclMappingAttribute
                    string ExeclMappingPropertyKey         = $"{TName}_{Prty.Name}_ExeclMappingPropertyKey";
                    string ExeclMappingPropertyKeyNoHave   = $"{TName}_{Prty.Name}_ExeclMappingPropertyKeyNoHave";
                    ExeclMappingAttribute PrtyExeclMapping = CacheHelper.GetCache <ExeclMappingAttribute>(ExeclMappingPropertyKey);
                    if (PrtyExeclMapping == null && !CacheHelper.IsExist(ExeclMappingPropertyKeyNoHave))
                    {
                        PrtyExeclMapping = Prty.GetCustomAttribute <ExeclMappingAttribute>(true);
                        if (PrtyExeclMapping != null)
                        {
                            CacheHelper.SetCache(ExeclMappingPropertyKey, PrtyExeclMapping);
                        }
                        else
                        {
                            CacheHelper.SetCache(ExeclMappingPropertyKeyNoHave, true);
                        }
                    }
                    #endregion

                    if (dt.Columns.Contains(PrtyExeclMapping.ExeclHeadName))
                    {
                        // 判断此属性是否有Setter
                        if (!Prty.CanWrite)
                        {
                            continue;                //该属性不可写,直接跳出
                        }
                        //取值
                        object value = row[PrtyExeclMapping.ExeclHeadName];
                        //如果非空,则赋给对象的属性
                        if (value != DBNull.Value && value != null && !string.IsNullOrEmpty(value.ToString()))
                        {
                            #region 获取指定字段ConvertValueAttribute
                            string ConvertValuePropertyKey              = $"{TName}_{Prty.Name}_ConvertValuePropertyKey";
                            string ConvertValuePropertyKeyNoHave        = $"{TName}_{Prty.Name}_ConvertValuePropertyKeyNoHave";
                            ConvertValueAttribute appointValueAttribute = CacheHelper.GetCache <ConvertValueAttribute>(ConvertValuePropertyKey);
                            if (appointValueAttribute == null && !CacheHelper.IsExist(ConvertValuePropertyKeyNoHave))
                            {
                                appointValueAttribute = Prty.GetCustomAttribute <ConvertValueAttribute>(true);
                                if (appointValueAttribute != null)
                                {
                                    CacheHelper.SetCache(ConvertValuePropertyKey, appointValueAttribute);
                                }
                                else
                                {
                                    CacheHelper.SetCache(ConvertValuePropertyKeyNoHave, true);
                                }
                            }
                            #endregion

                            if (appointValueAttribute != null)
                            {
                                value = appointValueAttribute.GetConvertValueValue(value);
                            }

                            #region 字段验证BaseValidationAttribute
                            string BaseValidationPropertyKey                = $"{TName}_{Prty.Name}_BaseValidationPropertyKey";
                            string BaseValidationPropertyKeyNoHave          = $"{TName}_{Prty.Name}_BaseValidationPropertyKeyNoHave";
                            BaseValidationAttribute baseValidationAttribute = CacheHelper.GetCache <BaseValidationAttribute>(BaseValidationPropertyKey);
                            if (baseValidationAttribute == null && !CacheHelper.IsExist(ConvertValuePropertyKeyNoHave))
                            {
                                baseValidationAttribute = Prty.GetCustomAttribute <BaseValidationAttribute>(true);
                                if (baseValidationAttribute != null)
                                {
                                    CacheHelper.SetCache(BaseValidationPropertyKey, baseValidationAttribute);
                                }
                                else
                                {
                                    CacheHelper.SetCache(BaseValidationPropertyKeyNoHave, true);
                                }
                            }
                            #endregion



                            object objValue = GetValue(Prty, value);
                            Prty.SetValue(t, objValue, null);
                        }
                    }
                }
                listEntity.Add(t);
            }
            return(listEntity);
        }