1. 程式人生 > 實用技巧 >ASP.Net Core -- 模型驗證

ASP.Net Core -- 模型驗證

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