Exemplo n.º 1
0
        protected override IEnumerable <ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable <Attribute> attributes)
        {
            string            resourceKeyPath = string.Empty;
            IList <Attribute> newAttributes   = new List <Attribute>(attributes);
            LocalizedDynamicValidatorsAttribute resourceMapperAttr = attributes.FirstOrDefault(a => a is LocalizedDynamicValidatorsAttribute) as LocalizedDynamicValidatorsAttribute;

            if (resourceMapperAttr == null)
            {
                System.Reflection.MemberInfo classInfo = metadata.ContainerType;
                if (classInfo != null)
                {
                    var resourceMapperRootAttr = classInfo.GetCustomAttributes(typeof(ResourceMappingRootAttribute), false).FirstOrDefault() as ResourceMappingRootAttribute;
                    if (resourceMapperRootAttr != null)
                    {
                        resourceKeyPath = resourceMapperRootAttr.Path + "." + metadata.PropertyName;
                    }
                }
            }
            else
            {
                resourceKeyPath = resourceMapperAttr.ResourceKeyPath;
            }

            if (!string.IsNullOrEmpty(resourceKeyPath))
            {
                string[] validators = ResourceManager.GetValidators(resourceKeyPath).Replace(" ", "").Split(',');
                var      maxLength  = ResourceManager.GetMaxLength(resourceKeyPath);
                if (!string.IsNullOrEmpty(maxLength))
                {
                    var required = new MaxLengthAttribute(maxLength.ToInteger());
                    required.ErrorMessage = string.Format(LocalizationHelper.GetResourceText("Shared.Messages.MaximumLengthExceeded"), maxLength);
                    newAttributes.Add(required);
                }
                for (int i = 0; i < validators.Length; i++)
                {
                    if (string.Equals(validators[i], "required", StringComparison.OrdinalIgnoreCase))
                    {
                        var required = new LocalizedRequiredAttribute();
                        newAttributes.Add(required);
                    }
                    else if (validators[i].StartsWith("email", StringComparison.OrdinalIgnoreCase))
                    {
                        var email = new LocalizedEmailAttribute();
                        newAttributes.Add(email);
                    }
                    else if (validators[i].StartsWith("phone", StringComparison.OrdinalIgnoreCase))
                    {
                        var phone = new LocalizedPhoneAttribute();
                        newAttributes.Add(phone);
                    }
                    else if (validators[i].StartsWith("alphanumeric", StringComparison.OrdinalIgnoreCase))
                    {
                        var alphanumeric = new LocalizedAlphaNumericAttribute();
                        newAttributes.Add(alphanumeric);
                    }
                    else if (validators[i].StartsWith("zipcode", StringComparison.OrdinalIgnoreCase))
                    {
                        var zipcode = new LocalizedZipCodeAttribute();
                        newAttributes.Add(zipcode);
                    }
                    else if (validators[i].StartsWith("mark", StringComparison.OrdinalIgnoreCase))
                    {
                        double minMark = 0;
                        double maxMark = 100;
                        if (validators[i].Contains("-"))
                        {
                            string[] validatorPatternArray = validators[i].Split('-');

                            if (validatorPatternArray.Length == 2)
                            {
                                maxMark = validatorPatternArray[1].ToDouble();
                            }
                            else if (validatorPatternArray.Length > 2)
                            {
                                minMark = validatorPatternArray[1].ToDouble();
                                maxMark = validatorPatternArray[2].ToDouble();
                            }
                        }

                        var num = new RangeAttribute(minMark, maxMark);
                        num.ErrorMessage = string.Format(LocalizationHelper.GetResourceText("Shared.Messages.NumberRange"), minMark, maxMark);
                        newAttributes.Add(num);
                    }
                    else if (validators[i].StartsWith("number", StringComparison.OrdinalIgnoreCase))
                    {
                        int max = 100;
                        if (validators[i].Contains("-"))
                        {
                            int.TryParse(validators[i].Split('-')[1], out max);
                        }
                        var num = new LocalizedNumberAttribute(max);
                        newAttributes.Add(num);
                    }
                    else if (validators[i].StartsWith("decimal", StringComparison.OrdinalIgnoreCase))
                    {
                        var num = new LocalizedDecimalAttribute();
                        newAttributes.Add(num);
                    }
                    else if (validators[i].StartsWith("url", StringComparison.OrdinalIgnoreCase))
                    {
                        var url = new LocalizedUrlAttribute();
                        newAttributes.Add(url);
                    }
                    else if (validators[i].StartsWith("nospace", StringComparison.OrdinalIgnoreCase))
                    {
                        var url = new LocalizedNoSpaceAttribute();
                        newAttributes.Add(url);
                    }
                }
            }

            return(base.GetValidators(metadata, context, newAttributes));
        }
Exemplo n.º 2
0
        public static IDictionary <string, object> GetValidatorAttributes(string validators)
        {
            IDictionary <string, object> attributes = new Dictionary <string, object>();

            string[] validatorList = !string.IsNullOrEmpty(validators) ? validators.Replace(" ", "").Split(',') : new string[] { };
            foreach (var item in validatorList)
            {
                if (!attributes.Keys.Contains("data-val"))
                {
                    attributes.Add("data-val", "true");
                }
                if (string.Equals(item, "required", StringComparison.OrdinalIgnoreCase))
                {
                    attributes.Add("data-val-required", LocalizationHelper.GetResourceText("Shared.Messages.Mandatory"));
                }
                else if (item.StartsWith("email", StringComparison.OrdinalIgnoreCase))
                {
                    attributes.Add("data-val-email", LocalizationHelper.GetResourceText("Shared.Messages.vEmailField"));
                }
                else if (item.StartsWith("phone", StringComparison.OrdinalIgnoreCase))
                {
                    attributes.Add("data-val-phone", LocalizationHelper.GetResourceText("Shared.Messages.vPhoneField"));
                }
                else if (item.StartsWith("zipcode", StringComparison.OrdinalIgnoreCase))
                {
                    attributes.Add("data-val-zipcode", LocalizationHelper.GetResourceText("Shared.Messages.vZipCodeField"));
                }
                else if (item.StartsWith("mark", StringComparison.OrdinalIgnoreCase))
                {
                    string min = string.Empty;
                    string max = string.Empty;
                    string rangeValidatorMessage = string.Empty;
                    if (item.Contains("-"))
                    {
                        var rangeArray = item.Split('-');
                        if (rangeArray.Length > 2)
                        {
                            min = rangeArray[1];
                            max = rangeArray[2];
                            rangeValidatorMessage = LocalizationHelper.GetResourceText("Shared.Messages.NumberRange");
                        }
                        else
                        {
                            max = rangeArray[1];
                            rangeValidatorMessage = LocalizationHelper.GetResourceText("Shared.Messages.vNumericLimited");
                        }
                    }
                    else
                    {
                        max = "10000";
                    }
                    if (!string.IsNullOrWhiteSpace(min))
                    {
                        attributes.Add("data-val-range-min", min);
                    }
                    attributes.Add("data-val-range-max", max);
                    attributes.Add("data-val-range", rangeValidatorMessage);
                }
                else if (item.StartsWith("number", StringComparison.OrdinalIgnoreCase))
                {
                    attributes.Add("data-val-number", LocalizationHelper.GetResourceText("Shared.Messages.NumberRange"));
                }
                else if (item.StartsWith("number", StringComparison.OrdinalIgnoreCase))
                {
                    attributes.Add("data-val-decimal", string.Format(LocalizationHelper.GetResourceText("Shared.Messages.DecimalRange"), LocalizationHelper.GetResourceText("Shared.Limits.Decimal")));
                }
                else if (item.StartsWith("file-", StringComparison.OrdinalIgnoreCase))
                {
                    attributes.Add("data-val-filetype", item.Split('-')[1]);
                }
            }
            return(attributes);
        }