asp.net core2 mvc 基礎教程--Model 驗證 Again
阿新 • • 發佈:2020-07-16
自定義驗證 Attribute
- Attribute,IModelValidator
示例:ValidUrlAttribute
public class ValidUrlAttribute : Attribute, IModelValidator { public string ErrorMessage { get; set; } public IEnumerable<ModelValidationResult> Validate( ModelValidationContext context) { var url = context.Model asstring; if (url != null && Uri.IsWellFormedUriString(url, UriKind.Absolute)) { return Enumerable.Empty<ModelValidationResult>(); } return new List<ModelValidationResult> { new ModelValidationResult(string.Empty, ErrorMessage) }; } }
使用時標註在 ViewModel 等實體類的屬性上即可:
[Display(Name = "封面地址")] [Required(ErrorMessage = "{0}是必填項"), MaxLength(200, ErrorMessage = "{0}的長度不可超過{1}")] //[DataType(DataType.Url)] [ValidUrl(ErrorMessage = "這個URL不正確")] public string CoverUrl { get; set; }
遠端驗證
- [Remote]
- 客戶端呼叫 Action 方法進行驗證(前臺呼叫後臺驗證)
Action 中的方法:
[AcceptVerbs("Get", "Post")] public async Task<IActionResult> CheckRoleExist([Bind("RoleName")]string roleName) { var role = await _roleManager.FindByNameAsync(roleName); if (role != null) return Json("角色已經存在了"); return Json(true); }
標註屬性:
public class RoleAddViewModel { [Required] [Display(Name = "角色名稱")] [Remote(nameof(RoleController.CheckRoleExist), "Role", ErrorMessage = "角色已存在")] public string RoleName { get; set; } }
注:暫時沒找到更優雅的方法獲取到 "Role"。