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

下面说说我遇到的情况

同上,我也追踪到了两个字段不能为空,但是这两个字段却不在我的Model中......百思不得姐

后来发现,附加属性也会被检测

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

        public string LastName { get; set; }

        public int Status { get; set; }

        public Dept dept { get; set; }//也会验证Model有效性
    }
原文地址:https://www.cnblogs.com/djd66/p/15261033.html