I have two separate fields on the page: one for date and one for time.
This is the model:
[Required]
[DisplayFormat(ApplyFormatInEditMode = true, Dat
In your view model try this
[Display(Name = "Start Time")]
[Time]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")]
public DateTime Time { get; set; }
and have the attribute class
public class TimeAttribute : ValidationAttribute, IClientValidatable
{
public IEnumerable GetClientValidationRules(ModelMetadata metadata,
ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = ErrorMessage,
ValidationType = "time"
};
}
public override bool IsValid(object value)
{
DateTime time;
if (value == null || !DateTime.TryParse(value.ToString(), out time))
return false;
return true;
}
}
EDIT: I'm also aware that in some cases you need to add some scripting to the client html such as that found in this answer MVC3 unobtrusive validation group of inputs although I'm not exactly sure when its necessary. This answer should get you half way there. Unfortunately, I'm not sure this answer prevents the postback, but it does flag the model as invalid.