要确保自定义验证生效,需在模型中正确添加验证特性。例如,假设要验证用户名是否唯一,可以在模型中添加如下代码:
public class UserModel
{
public int Id { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
public string UserName { get; set; }
[Required]
[CustomValidation(typeof(UserModel), "ValidateUserName", ErrorMessage = "用户名已被占用,请更换!")]
public string Password { get; set; }
public static ValidationResult ValidateUserName(string username, ValidationContext context)
{
// 在此实现验证逻辑,如果验证不通过,返回一个 ValidationResult 对象
return ValidationResult.Success;
}
}
在上述代码中,Password
字段使用了上文提到的 CustomValidation
特性,并指定了验证方法的名称和错误信息。具体实现的验证逻辑可以在 ValidateUserName
方法中完成。
需要注意的是,自定义验证特性需要与 ModelState 交互才能生效。可以在控制器中手动调用 Validate
方法进行验证,例如:
[HttpPost]
public IActionResult CreateUser(UserModel model)
{
if (ModelState.IsValid)
{
// 执行创建用户的逻辑
}
// 如果有验证错误,则重新渲染视图
return View(model);
}
在上述代码中,如果 ModelState 中存在验证错误,则不会执行创建用户的逻辑,而是重新渲染视图,让用户修正错误后再提交。