加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 数据注释 – 如何用MVC3中的Web.Config值替换Ran

发布时间:2020-12-16 03:38:02 所属栏目:asp.Net 来源:网络整理
导读:如何用MVC3中的Web.Config值替换Range值? [Range(5,20,ErrorMessage = "Initial Deposit should be between $5.00 and $20.00")public decimal InitialDeposit { get; set; } web.config中: add key="MinBalance" value="5.00"/add key="MaxDeposit" value
如何用MVC3中的Web.Config值替换Range值?

[Range(5,20,ErrorMessage = "Initial Deposit should be between $5.00 and $20.00")
public decimal InitialDeposit { get; set; }

web.config中:

<add key="MinBalance" value="5.00"/>
<add key="MaxDeposit" value="20.00"/>

解决方法

您需要创建一个继承自RangeAttribute并实现IClientValidatable的自定义属性.

public class ConfigRangeAttribute : RangeAttribute,IClientValidatable
    {
        public ConfigRangeAttribute(int Int) :
            base
            (Convert.ToInt32(WebConfigurationManager.AppSettings["IntMin"]),Convert.ToInt32(WebConfigurationManager.AppSettings["IntMax"])) { }

        public ConfigRangeAttribute(double Double) :
            base
            (Convert.ToDouble(WebConfigurationManager.AppSettings["DoubleMin"]),Convert.ToDouble(WebConfigurationManager.AppSettings["DoubleMax"])) 
        {
            _double = true;
        }

        private bool _double = false;

        public override string FormatErrorMessage(string name)
        {
            return String.Format(ErrorMessageString,name,this.Minimum,this.Maximum);
        }

        public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,ControllerContext context)
        {
            var rule = new ModelClientValidationRule
            {
                ErrorMessage = FormatErrorMessage(this.ErrorMessage),ValidationType = "range",};
            rule.ValidationParameters.Add("min",this.Minimum);
            rule.ValidationParameters.Add("max",this.Maximum);
            yield return rule;
        }

        protected override ValidationResult IsValid(object value,ValidationContext validationContext)
        {
            if (value == null)
                return null;

            if (String.IsNullOrEmpty(value.ToString()))
                return null;

            if (_double)
            {
                var val = Convert.ToDouble(value);
                if (val >= Convert.ToDouble(this.Minimum) && val <= Convert.ToDouble(this.Maximum))
                    return null;
            }
            else
            {
                var val = Convert.ToInt32(value);
                if (val >= Convert.ToInt32(this.Minimum) && val <= Convert.ToInt32(this.Maximum))
                    return null;
            }

            return new ValidationResult(
                FormatErrorMessage(this.ErrorMessage)
            );
        }
    }

用法示例:

[ConfigRange(1)]
public int MyInt { get; set; }

[ConfigRange(1.1,ErrorMessage = "This one has gotta be between {1} and {2}!")]
public double MyDouble { get; set; }

第一个示例将返回默认错误消息,第二个示例将返回您的自定义错误消息.两者都将使用web.config中定义的范围值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读