asp.net mvc框架之數據驗證


asp.net mvc會自動根據屬性的類型進行基本的校驗,比如如果屬性是int類型,那么再提交非整數類型的數據的時候就會報錯

注意:asp.net mvc並不是再請求驗證失敗的時候拋出異常,而是把決定權交給程序員,程序員需要決定如何處理數據校驗失敗。再Action中根據ModelState.IsValid判斷是否驗證通過。

public ActionResult Index(Models.Person model)
        {
            //ModelState.IsValid:數據驗證
            if (ModelState.IsValid)
            {
                string result = "age=" + model.age;
                return Content(result);
            }
            else
            {
                string result = "非法數值";
                return Content(result);
            }
            
        }

雖然時候ModelState.IsValid能判斷驗證是否通過,如果沒有通過,那么就會報錯,通過下面的類就可以獲取到錯誤信息了

public static class ValiHelper
    {
        public static string GetValidMsg(ModelStateDictionary modelState)
        {
            StringBuilder sb = new StringBuilder();
            foreach (var propName in modelState.Keys)
            {
                //modelState[propName].Errors是屬性相關的錯誤消息
                if (modelState[propName].Errors.Count<=0)
                {
                    continue;
                }
                sb.Append("屬性錯誤:").Append(propName).Append(":");
                //遍歷每個錯誤消息(因為一個屬性可能有多個錯誤消息)
                foreach (ModelError modelError in modelState[propName].Errors)
                {
                    sb.Append(modelError.ErrorMessage);
                }
                sb.AppendLine();
            }
            return sb.ToString();
        }
    }

方法調用

 

=============================================================================================================

數據驗證Attribute

Attribute主要是定義在屬性上面,類似於屬性里面的get,set方法。

常用的Attribute驗證

[Required] 代表必填項

[StringLength(100)] 代表字符串最大長度100

[StringLength(100,MinimumLength=10)] 代表長度介於10到100之間

[RegularExpression(@"aa(\d)+bb")] 代表正則表達式

[Range(10,20)] 代表數值的取值范圍,對比於字符串長度

[Compare("Email")] 代表這個屬性必須和Email屬性值一致

[EmailAddress] 代表郵箱地址

[phone] 表示電話號碼,規則有限制(不推薦使用)

如果在驗證Attribute上使用ErrorMessage="自定義錯誤信息"屬性,用來自定義報錯信息。其中ErrorMessage中可以用{0}占位符作為屬性名的占位。

public class ValiModel
    {
        [Required(ErrorMessage = "數據必須填寫")]
        public int id { get; set; }
        [StringLength(10, MinimumLength = 5)]
        [Required]
        public string name { get; set; }
        public int age { get; set; }
    }

 

========================================================

自定義驗證

方式一:

public class QQNumber:RegularExpressionAttribute
    {
        public QQNumber():base(@"^\d{5,10}$")
        {
            this.ErrorMessage = "字段{0}不是合法的qq號"; 
        }
    }

方式二:

 

public class CNPhoneNumAttribute:ValidationAttribute
    {
        public CNPhoneNumAttribute()
        {
            this.ErrorMessage = "電話號碼必須是固話或者手機13,15,17開頭";
        }
        public override bool IsValid(object value)
        {
            if (value is string)
            {
                string s = (string)value;
                if (s.Length==13)
                {
                    if (s.StartsWith("13") || s.StartsWith("15") || s.StartsWith("17"))
                    {
                        return true;
                    }
                    else
                    { 
                        this.ErrorMessage = "";
                        return false;
                    }
                }
                else if (s.Contains("-")) //固定電話
                {
                    string[] strs = s.Split('-');
                    if (strs[0].Length==3||strs[0].Length==4)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                    
                }
            }
            return false;
            
        }
    }

 


免責聲明!

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



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