I am designing a data input form using asp.net MVC4 which has an input of type date.
Using the unobtrusive jQuery library in chrome and jQueryUI datepicker I was still getting an error (The field news_date must be a date.), after selecting a correct date format, using the datepicker (i.e. 14/02/2013) and submitting the form.
Some searching suggested I should use the jQuery.globilization library. So after reading the documentation I added a reference to the following script.
$(document).ready(function () {
$.culture = Globalize.culture("en-GB");
$.validator.methods.date = function (value, element) {
return this.optional(element) || Globalize.parseDate(value, "dd/MM/yyyy", "en-GB");
}
});
However I am still getting the error
If I debug the the above code in chrome i can see that the value of "value) is "2014-02-14".
Below is html which gets rendered.
<div class="editor-field">
<input class="text-box single-line datepicker hasDatepicker input-validation-error" data-val="true" data-val-date="The field news_date must be a date." id="news_date" name="news_date" type="date" value="">
<script type="text/javascript">
$(function () {
$(".datepicker").datepicker({ dateFormat: "dd/MM/yyyy" });
});
</script>
<span class="field-validation-error" data-valmsg-for="news_date" data-valmsg-replace="true"><span for="news_date" class="" style="">The field news_date must be a date.</span></span>
</div>
UPDATE: incidentally if i change my validator method to hardcode. i.e.
$.validator.methods.date = function (value, element) {
return this.optional(element) || Globalize.parseDate("14/03/2014", "dd/MM/yyyy", "en-GB")
}
It works. So it definately appears to be the format that the date is being stored on the page prior to POST or submit validation which is the issue.
UPDATE
after selecting the date if i run $('#news_date').val()
in the chrome console, i get "2014-02-14" and i can debug my script and see the value being passed it the validator method it is this value and thus it doesnt match the british date format thus returning a null, rather than a value which would pass validation. So is my problem with how the datepicker is storing the date after selection?
Has anyone found a workaround for this in Chrome?