Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating custom data annotation validation in MVC 3

For instance, I have an Employee view model. When creating an employee, I want to validate the username to make sure it doesn't exist.

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; }
}

And then have my ValidateDuplicate function somewhere with the code to check for a duplicate.

Is this possible?

like image 719
Steven Avatar asked Jun 29 '11 20:06

Steven


2 Answers

I would suggest looking at remote validation. The example even matches your case.

Basically, add the remote attribute to your viewmodel property that points to a controller action

[Remote("IsUserExists", "Account", ErrorMessage = "Can't add what already exists!")]
[Required(ErrorMessage = "Username is required")]
[DisplayName("Username")]
public string Username { get; set; }

which does your work

public ActionResult IsUserExists(string userName) 
{
 if (!UserService.UserNameExists(userName) || (CurrentUser.UserName == userName))
 {
      return "Ok.";
 }
}
like image 138
Khepri Avatar answered Nov 07 '22 17:11

Khepri


Yes, it's possible. You'll need to write your own validation attribute.

like image 27
Craig M Avatar answered Nov 07 '22 16:11

Craig M