I have two separate fields on the page: one for date and one for time.
This is the model:
[Required]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:hh:mm tt}")]
public DateTime? StartTime { get; set; }
[Required]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime Date { get; set; }
This is the view:
@Html.TextBoxFor(m => m.Date, "{0:MM/dd/yyyy}", new { type = "text" })
@Html.TextBoxFor(m => m.StartTime, "{0:hh:mm tt}", new { type = "text", id = "timeStart" })
The javascript unobtrusive validation works fine with the Date
field however when i enter "11:00 PM" or "11:00 pm" in StartTime
the validation shows
"The field StartTime must be a date"
Server side validation works fine with "0:hh:mm tt"
it's only the javascript that has a problem. For now i just disabled javascript validation but would like eventually to have it on this page
Can this be done for "time" field?
In your view model try this
and have the attribute class
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.
Honestly the easiest way to achieve this is to use a regular expression validator for it. Here is an example.
The unobtrusive validation should work just fine with this expression.
Hope this can help you!
EDIT
I've fixed the regular expression which started throwing errors in the console because of some illegal characters. Also, you will need a string property wrapper for this property or else it will always look for a valid
DateTime
.Below is what you should be binding to.
Model:
View:
Add
DataType.Time
attribute to your time field and useEditorFor
s to remove format duplication:Model
View