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了。

原文地址:https://www.cnblogs.com/basterdaidai/p/6679849.html