码迷,mamicode.com
首页 > Web开发 > 详细

mvc model验证

时间:2014-06-28 10:37:37      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   get   数据   

前几天突然想写写看利用ModelState的验证方式。自己来写几个验证特性。先上代码

    public class StringAttribute : ValidationAttribute
    {
        /// <summary>
        /// 验证规则
        /// </summary>
        public string ValidateValue { get; set; }

        /// <summary>
        /// 数据验证
        /// </summary>
        /// <param name="value"></param>
        /// <param name="validationContext"></param>
        /// <returns></returns>
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            
            if ((string)value == ValidateValue)//判断是否符合验证规则
            {
                return ValidationResult.Success;
            }
            else
            {
                var result = new ValidationResult("error");//返回一个包含错误提示的结果
                return result;
            }
        }

        public override bool IsValid(object value)
        {
            return base.IsValid(value);
        }



    }

 

自己写着玩的,比较简单。写自己的验证特性必须继承ValidationAttribute。

其中可以通过重写IsValid的两个重载方法来实现自己的验证规则。IsValid有两个参数。value是需要验证的值,ValidationContext是一个验证的上下文对象。ValidationContext中包含需要验证的成员名称MemberName和DisplayName,还有ObjectInstance验证对象和ObjectType对象类型。

我自己定义了一个ValidateValue字段,用来表示验证规则。

如果验证失败,就返回一个新的ValidationResult对象。ValidationResult包含一个ErrorMessage错误信息用于显示,MemberNames验证结果有误的成员名称集合。

ErrorMessage错误信息可以自己定义,也可以用占位符{DisplayName}将错误的成员名称显示出来。

这只是简单的验证单个字段,经常我们会遇到同一个对象中需要另一个字段来验证每个字段。

在这里也可以实现,需要利用反射的方式来实现。

先上代码来看看如何实现。

bubuko.com,布布扣
    public class StringAttribute : ValidationAttribute
    {
        /// <summary>
        /// 验证规则
        /// </summary>
        public string ValidateValue { get; set; }

        /// <summary>
        /// 帮助验证的其他字段
        /// </summary>
        public string OtherpProtery { get; set; }

        /// <summary>
        /// 数据验证
        /// </summary>
        /// <param name="value"></param>
        /// <param name="validationContext"></param>
        /// <returns></returns>
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            //用反射获取用户输入的值
            PropertyInfo property = validationContext.ObjectType.GetProperty(OtherpProtery);
            var values = property.GetValue(validationContext.ObjectInstance);

            if ((string)values == value)//判断是否符合验证规则
            {
                return ValidationResult.Success;
            }
            else
            {
                var result = new ValidationResult("error");//返回一个包含错误提示的结果
                return result;
            }
        }

        public override bool IsValid(object value)
        {
            return base.IsValid(value);
        }



    }
View Code

新增加了一个OtherpProtery属性,它用来保存其他的成员名。然后通过

//用反射获取用户输入的值
PropertyInfo property = validationContext.ObjectType.GetProperty(OtherpProtery);
var values = property.GetValue(validationContext.ObjectInstance);

来取出其他属性中用户输入的值。与当前成员的进行验证比较。比如像是用户注册需要输入两次密码是否一致。

 有错误的地方希望大牛们指出,表喷我

 

 

mvc model验证,布布扣,bubuko.com

mvc model验证

标签:style   blog   http   color   get   数据   

原文地址:http://www.cnblogs.com/ted0101/p/3804163.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!