Я бы посоветовал посмотреть на удаленную проверку. Пример даже соответствует вашему случаю.
В основном, добавьте атрибут remote к свойству viewmodel, который указывает на действие контроллера
[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.";
}
}