模型驗證就是我們可以給模型類中的屬性添加一些規則,然后判別用戶輸入的信息是否符合。比如,有些屬性必填,有的是密碼不可見,然后當用戶提交Post請求后,框架就會進行驗證,如果不通過,可以把錯誤信息返回給用戶!
比如有這樣一個模型類:
public class StudentCreateViewModel
{
[Display(Name = "姓"),Required]
[DataType(DataType.Password)]
public string FirstName { get; set; }
[Display(Name = "名"),Required,MaxLength(10)]
public string LastName { get; set; }
[Display(Name = "出生日期"), Required]
public DateTime BirthDate { get; set; }
[Display(Name = "性別")]
public Gender Gender { get; set; }
}
我們給姓設置了必填,並且將類型設置為密碼不可見,等等......然后在控制器中就可以判斷驗證是否通過:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(StudentCreateViewModel student)
{
if (ModelState.IsValid)
{
var list = new Student
{
FirstName = student.FirstName,
LastName = student.LastName,
BirthDate = student.BirthDate,
Gender = student.Gender
};
var newModel = _repository.Add(list);
return RedirectToAction(nameof(Detail), new { id = newModel.Id });
}
return View();
}
通過就跳轉到頁面將添加的信息顯示,否則就打印錯誤信息,如下:
<form method="post">
<div>
<label asp-for="FirstName"></label>
<input asp-for="FirstName" />
<span asp-validation-for="FirstName"></span>
</div>
<div>
<label asp-for="LastName"></label>
<input asp-for="LastName" />
<span asp-validation-for="LastName"></span>
</div>
<div>
<label asp-for="BirthDate"></label>
<input asp-for="BirthDate" type="date" />
<span asp-validation-for="BirthDate"></span>
</div>
<div>
<label asp-for="Gender"></label>
<select asp-for="Gender" asp-items="Html.GetEnumSelectList<Gender>()">
</select>
<span asp-validation-for="Gender"></span>
</div>
<input type="submit" value="save" />
</form>
同時,我們還可以將屬性級的錯誤信息一次性打印出來,可以在form表單下使用:
<div asp-validation-summary="All"></div>
這是屬性級錯誤,也可輸出Model級的錯誤,比如在后端添加:
ModelState.AddModelError(string.Empty, "Model level error");
然后使用:
<div asp-validation-summary="ModelOnly"></div>
來顯示model級的錯誤信息
