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