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實體進行賦值就可以了,呵呵,是不是很方便 !


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM