1. 程式人生 > >ASP.NET MVC裡ModelState.IsValid總是true或者總是false

ASP.NET MVC裡ModelState.IsValid總是true或者總是false

model的屬性如果不加驗證相關的特性,ModelState.IsValid會永遠為true;如果加了驗證相關的特性,不滿足驗證規則時,ModelState.IsValid為false.

接收到引數屬性型別與Model定義不符時,ModelState.IsValid也會為false.

引數模型:

複製程式碼

    public class PersonModel
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public int Status { get; set; }
    }

複製程式碼

 控制器程式碼:

複製程式碼

     [HttpPost]
        public string ReceivePerson(PersonModel model)
        {
            if (!ModelState.IsValid)
            {
                var msg = string.Empty;
                foreach(var value in ModelState.Values)
                {
                    if(value.Errors.Count>0)
                    {
                        foreach(var error in value.Errors)
                        {
                            msg = msg + error.ErrorMessage;
                        }
                    }
                }
                return msg;
            }
            else
                return "成功";
        }

        public string Index()
        {
            return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }

複製程式碼

當給Status傳一個“*”時,ModelState.IsValid為false,錯誤資訊為:值“*”對於 Status 無效。

如果給某個Model的某個欄位加上驗證特性,比如LastName必需:

複製程式碼

    public class PersonModel
    {
        public string FirstName { get; set; }

        [Required()]
        public string LastName { get; set; }

        public int Status { get; set; }
    }

複製程式碼

當LastName為空時,可以看到ModelState.IsValid為false,錯誤資訊為:LastName 欄位是必需的。

 現在可以知道ModelState.IsValid總是為false或總是為true了。