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实体进行赋值就可以了,呵呵,是不是很方便 !

  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/lori/p/2451070.html
Copyright © 2011-2022 走看看