zoukankan      html  css  js  c++  java
  • MVC验证(只验证指定字段)

    在我上一篇文章中,对实体验证的方式是如果所有字段不满足条件将会向集合中迭代返回一个结果,但有时,我们不希望验证所有对象,可以只是修改指定字段,如用户修改密码功能,可以对实体验证只考虑原密码,新密码和确认密码就可以了,而如果验证所有字段反而有点多此一举了,所以,我对实体类的验证部分进行了一个改动

    看代码

    
    
           /// <summary>
            /// 如果验证的字段为NULL表示验证所有字段
         /// </summary>
            public string[] ValidFields { get; set; }
         public virtual bool IsValid { get { return this.GetRuleViolations().Count() == 0; } }
          public virtual IEnumerable<RuleViolation> GetRuleViolations()
            {
                PropertyInfo[] propertyInfo = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
                if (ValidFields != null) propertyInfo = propertyInfo.Where(i => ValidFields.Contains(i.Name)).ToArray();
                foreach (var i in propertyInfo)
                {
                    if (i.GetCustomAttributes(typeof(System.Data.Linq.Mapping.ColumnAttribute), false) != null
                        && i.GetCustomAttributes(typeof(System.Data.Linq.Mapping.ColumnAttribute), false).Count() > 0
                        && !((System.Data.Linq.Mapping.ColumnAttribute)i.GetCustomAttributes(typeof(System.Data.Linq.Mapping.ColumnAttribute), false)[0]).CanBeNull
                        && !((System.Data.Linq.Mapping.ColumnAttribute)i.GetCustomAttributes(typeof(System.Data.Linq.Mapping.ColumnAttribute), false)[0]).IsPrimaryKey)
                        if (i.GetValue(this, null) == null || string.IsNullOrEmpty(i.GetValue(this, null).ToString()))
                            yield return new RuleViolation("*", i.Name);
                }
            }
    
    

    这样,如果我们希望对实体的指定字段进行验证,为ValidFields实体进行赋值就可以了,呵呵,是不是很方便 !

  • 相关阅读:
    待写
    让一个小div在另一个大div里面 垂直居中的四种方法
    20 个有用的 SVG 工具,提供更好的图像处理
    php原理简述
    Apache 打开网页的时候等待时间过长的解决方案
    TCP协议中的三次握手和四次挥手(图解)
    apache 各平台进程线程模块解析
    浅谈移动Web开发(上):深入概念
    响应式布局
    jQuery Mobile 入门教程
  • 原文地址:https://www.cnblogs.com/lori/p/2451070.html
Copyright © 2011-2022 走看看