ASP.Net Core -- 模型驗證
阿新 • • 發佈:2020-08-17
模型驗證就是我們可以給模型類中的屬性新增一些規則,然後判別使用者輸入的資訊是否符合。比如,有些屬性必填,有的是密碼不可見,然後當用戶提交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級的錯誤資訊