Search code examples
asp.net-mvcasp.net-mvc-3jqueryasp.net-mvc-validation

MVC Client Side Validation doing database check


Is there a way how to perform a "database" check through the Client Side Validation in MVC?

I have the following class

public class EmailCheck : ValidationAttribute,IClientValidatable
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        string sErrorMessage = "Email already exists";
        return new ValidationResult(sErrorMessage); 
    }   

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        ModelClientValidationRule validationRule = new ModelClientValidationRule();
        validationRule.ValidationType = "checkemail";
        validationRule.ErrorMessage = "Invalid Email Format";
        validationRule.ValidationParameters.Add("param", "");
        return new List<ModelClientValidationRule> { validationRule };
    }  
}

I would like the Client Side Validation to call the "IsValid" method onkeyup/lost focus as well and not just do the regular javascript checks in the "checkemail" javascript function.

The javascript function i have is the following:

//Validation for Well-Formed Email
jQuery.validator.addMethod("checkemail",
    function (value, element, param) {
        var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;

        if (!emailReg.test(value))
            return false;

        return true;
    });

jQuery.validator.unobtrusive.adapters.add("checkemail", ["param"], function (options) {    
    options.rules["checkemail"] = options.params.param;
    options.messages["checkemail"] = options.message;
});

I would appreciate if anyone could guide me in the right direction or provide a tutorial of something similar.

Thanks


Solution

  • In your model try to use the "Remote" attribute

    http://msdn.microsoft.com/en-us/library/gg508808%28v=vs.98%29.aspx