[英]Creating custom data annotation validation in MVC 3
例如,我有一个员工视图 model。 创建员工时,我想验证用户名以确保它不存在。
public class EmployeeViewModel
{
[ScaffoldColumn(false)]
public int EmployeeId { get; set; }
[ValidateDuplicate(ErrorMessage = "That username already exists")]
[Required(ErrorMessage = "Username is required")]
[DisplayName("Username")]
public string Username { get; set; }
}
然后让我的 ValidateDuplicate function 与代码一起检查是否重复。
这可能吗?
我建议查看远程验证。 该示例甚至与您的情况相匹配。
基本上,将远程属性添加到指向 controller 操作的视图模型属性
[Remote("IsUserExists", "Account", ErrorMessage = "Can't add what already exists!")]
[Required(ErrorMessage = "Username is required")]
[DisplayName("Username")]
public string Username { get; set; }
你的工作是哪个
public ActionResult IsUserExists(string userName)
{
if (!UserService.UserNameExists(userName) || (CurrentUser.UserName == userName))
{
return "Ok.";
}
}
您可以按照此处的说明编写自己的自定义验证。 我修改了代码以在 model 中添加验证,因为我更喜欢 model 中的轨道活动记录的验证样式。
public class EmployeeViewModel
{
[CustomValidation(typeof(EmployeeViewModel), "ValidateDuplicate")]
[Required(ErrorMessage = "Username is required")]
[DisplayName("Username")]
public string Username { get; set; }
public static ValidationResult ValidateDuplicate(string username)
{
bool isValid;
using(var db = new YourContextName) {
if(db.EmployeeViewModel.Where(e => e.Username.Equals(username)).Count() > 0)
{
isValid = false;
} else {
isValid = true;
}
}
if (isValid)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("Username already exists");
}
}
}
是的,这是可能的。 您需要编写自己的验证属性。
您可以通过扩展属性 class 来实现,将其称为 ValidateDuplicate。 我会避免这样做,因为它只是您可能需要调用数据库的另一个地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.