2019/05/14,ASP.NET Core 2.2.0
摘要:ASP.NET Core MVC使用數據注釋配合jquery.validate提交頁面進行前端加后端的數據驗證
主要用到了jquery.validate(前端驗證)、數據注解(后端模型驗證)
建立模型類User,使用數據注釋
using System.ComponentModel.DataAnnotations; namespace Demo.Models { public class User { [Key] public int Id { get; set; } [Display(Name = "登錄賬號")] [Required(ErrorMessage ="登錄賬號必填")] [StringLength(15, ErrorMessage = "字符長度不能超過15個字")] public string LoginId { get; set; } public string PassWord { get; set; } public string Name { get; set; } [Range(minimum:1,maximum:100,ErrorMessage ="請輸入1到100的數字")] public int Age { get; set; } } }
代碼中部分數據注釋的作用效果如上圖所示,更多注釋可以使用百度,例如遠程驗證、郵箱地址、正則表達式等
前端form表單,使用TagHelpers
<form asp-action="Create"> <div asp-validation-summary="ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="LoginId" class="control-label"></label> <input asp-for="LoginId" class="form-control" /> <span asp-validation-for="LoginId" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="PassWord" class="control-label"></label> <input asp-for="PassWord" class="form-control" /> <span asp-validation-for="PassWord" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Name" class="control-label"></label> <input asp-for="Name" class="form-control" /> <span asp-validation-for="Name" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="Age" class="control-label"></label> <input asp-for="Age" class="form-control" /> <span asp-validation-for="Age" class="text-danger"></span> </div> <div class="form-group"> <input type="submit" value="Create" class="btn btn-primary" /> </div> </form>
注意點:
1.aspnetcore用<form asp-action="Create">這種寫法,自動防范了請求偽造(csxf攻擊)
2.<span asp-validation-for="PassWord" class="text-danger"></span>這種區塊就是用於顯示驗證錯誤信息的地方,錯誤信息會自動加入到span標簽中
前端引入jquery.validate,注意使用之前要先引入jq
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
后台對應Create方法
[HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Create([Bind("Id,LoginId,PassWord,Name,Age")] User user) { if (string.IsNullOrWhiteSpace(user.Name)) { //名稱需要填寫,此處是為了演示AddModelError方法,實際Name必填應使用Required注釋控制 //ModelState.AddModelError("", "名稱需要填寫"); ModelState.AddModelError(nameof(Models.User.Name), "名稱需要填寫"); return View(nameof(Create)); } if (ModelState.IsValid) { _context.Add(user); await _context.SaveChangesAsync(); return RedirectToAction(nameof(Index)); } return View(user); }
使用ModelState.AddModelError(nameof(Models.User.Name), "名稱需要填寫");方法提示錯誤信息,會把錯誤信息給到對應span中
AddModelError第一個參數,如果是空字符串,則會把錯誤信息給到<div asp-validation-summary="ModelOnly" class="text-danger"></div>中