模型绑定时将Http请求中的数据映射到控制器操作方法上对应的参数,操作方法中的参数可以是简单类型,如整形,字符串等,也可以是复杂类型,如Product,Order等。
Asp.Net Core MVC的模型绑定和Asp.Net MVC模型绑定相似,模型绑定将按下图指定的顺序查找来自http请求中的数据绑定到控制器操作方法对应的参数上。
同时,Asp.Net MVC Core绑定模型的时候同样也会进行模型的校验。那么,我们怎么给模型添加校验呢,其实也和Asp.Net MVC差不多。
首先我们在模型的属性上添加验证属性,Display属性为显示在页面上的该字段的信息。
////// 学生模型 /// public class Student { public int Id { get; set; } [Display(Name="姓名")] [Required(ErrorMessage ="请输入名字")] public string Name { get; set; } [Display(Name = "班级")] [Required(ErrorMessage ="请输入班级")] public ClassNameEnum? ClassName { get; set; } [Display(Name = "邮箱地址")] [Required(ErrorMessage ="请输入邮箱地址")] public string Email { get; set; } }
一般的属性校验有:
Required 指定该字段是必填的
Range 指定允许的最小值和最大值
MinLength 指定字符串的最小长度
MaxLength 指定字符串的最大长度
Compare 比较模型的2个属性,例如比较Email和ComfirmEmail属性
RegularExpression 正则表达式,验证提供的值是否与正则表达式指定的模式匹配
其次,使用ModelState.IsValid属性验证属性是否绑定成功
if (ModelState.IsValid) { Student newStudent = _studentRepository.Add(student); return RedirectToAction("Details", new { id = newStudent.Id }); } else { return View(student); }
最后,使用asp-validation-for和asp-validation-summary tag helper 来显示错误信息
"All" class="text-danger">class="form-group row">class="col-sm-10"> for="Name" class="form-control" placeholder="请输入名字" /> for="Name" class="text-danger">class="form-group row">class="col-sm-10"> for="Email" class="form-control" placeholder="请输入邮箱" /> for="Email" class="text-danger">class="form-group row">class="col-sm-10"> <select asp-for="ClassName" asp-items="Html.GetEnumSelectList() "> select> for="ClassName" class="text-danger">
值得注意的是,在select标签的验证上,模型中有Required和无Required都会提示 The value '' is invalid.这是因为枚举ClassName里是int类型,而option里的value为“”,导致类型转化失败,我们可以在Student的ClassName设置为可空类型ClassNameEnum? 。