I'm affraid ASP.NET MVC 3 never creates data-val-date, here is list of attributes that might be created:
- data-val-number
- data-val-equalto
- data-val-range
- data-val-regex
- data-val-remote
- data-val-required
- data-val-length
You can create additional ModelValidatorProvider for DataType attribute like this:
public class ClientDataTypeNameModelValidatorProvider : ModelValidatorProvider
{
public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context)
{
if (metadata == null)
throw new ArgumentNullException("metadata");
if (context == null)
throw new ArgumentNullException("context");
if (metadata.DataTypeName == "Date")
yield return new DateModelValidator(metadata, context);
}
internal sealed class DateModelValidator : ModelValidator
{
public DateModelValidator(ModelMetadata metadata, ControllerContext controllerContext)
: base(metadata, controllerContext)
{ }
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
ModelClientValidationRule rule = new ModelClientValidationRule()
{
ValidationType = "date",
ErrorMessage = "[Put your error message here]"
};
return new ModelClientValidationRule[] { rule };
}
public override IEnumerable<ModelValidationResult> Validate(object container)
{
// No server-side validation logic
return Enumerable.Empty<ModelValidationResult>();
}
}
}
And register it in your Global.asax like this:
ModelValidatorProviders.Providers.Add(new ClientDataTypeNameModelValidatorProvider());
This should give you client validation support for DataType.Date, but you must remember that it will work only with jQuery validation as Microsoft validation doesn't have rule for date.