I am trying to write a custom validation attribute in MVC and I can't make it work as an unobstructive validation. It works fine with postback (kinda) but as the form is on a dialog, I must have an Ajax style call or it's unusable. Maybe what i am trying to do is unachieveable. The problem is i need to connect to a database to do the check.
I made a simple demo for my problem.
My model
public class Customer
{
    public int Id { get; set; }
    [IsNameUnique]
    [Required]
    public string Name { get; set; }
}
The view:
@model WebApplication1.Models.Customer
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { @id = "NewForm" }))
{
    @Html.ValidationSummary(true)
    @Html.EditorFor(m => m.Name)
    @Html.ValidationMessageFor(m => m.Name)
    <br />
    <input type="submit" value="Submit" />
}
Custom validation class
public class IsNameUnique : ValidationAttribute
{
    private CustomerRepository _repository;
    public IsNameUnique()
    {
        _repository = new CustomerRepository();
    }
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if(value != null)
        {
            var isValid = _repository.IsNameUnique(value);
            if(!isValid)
            {
                return new ValidationResult("Name must be unique");
            }
        }
        return ValidationResult.Success;
    }        
}
Post method
[HttpPost]
    public ActionResult Index(Customer customer)
    {
        if(ModelState.IsValid)
        {
            //add customer
        }
        return View();
    }
database call
class CustomerRepository
{
    internal bool IsNameUnique(object value)
    {
        //call to database
        return false;
    }
}
There is a form with a name field. I need to check if name is already in the database.
My question is how can I do unobtrusive style validation in my case? I found other posts on SO about IClientValidatable but none of them really show what I need to do. i.e. none of them do check against a database. Thanks.
 
     
     
     
    