6

我正在使用具有日期类型输入的 asp.net MVC4 设计数据输入表单。

在 chrome 和 jQueryUI datepicker 中使用不显眼的 jQuery 库,在选择正确的日期格式、使用 datepicker(即 2013 年 2 月 14 日)并提交表单后,我仍然遇到错误(字段 news_date 必须是日期。)。

一些搜索建议我应该使用 jQuery.globilization 库。因此,在阅读文档后,我添加了对以下脚本的引用。

$(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");
    }
});

但是我仍然收到错误

如果我在 chrome 中调试上面的代码,我可以看到 "value) 的值是 "2014-02-14"。

下面是被渲染的html。

<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>

更新:顺便说一下,如果我将验证器方法更改为硬编码。IE

$.validator.methods.date = function (value, element) {
    return this.optional(element) || Globalize.parseDate("14/03/2014", "dd/MM/yyyy", "en-GB")
}

有用。因此,它肯定是日期在 POST 或提交验证之前存储在页面上的格式,这是问题所在。

如果我在 chrome 控制台中运行,选择日期后更新$('#news_date').val(),我得到“2014-02-14”,我可以调试我的脚本并查看传递给验证器方法的值,它是这个值,因此它与英国日期不匹配格式因此返回一个空值,而不是一个可以通过验证的值。那么日期选择器在选择后如何存储日期是我的问题吗?

有没有人在 Chrome 中找到解决方法?

4

3 回答 3

11

此解决方法似乎可以处理 chrome 和 ie 等。在 chrome 中,我无法输入错误的日期,因此日期选择器会给我一个有效的日期,当它将它传递给验证器函数时,它将采用 yyyy-mm-dd 格式。即让我直接输入输入或使用选择器,输入一个无效的日期,即 2/30/2013(在 en-GB 文化中无效)它正确地使其无效并阻止进一步的进展。如果没有更好的建议,我认为这是最好的可行答案

$(document).ready(function () {
$.culture = Globalize.culture("en-GB");
$.validator.methods.date = function (value, element) {
    //This is not ideal but Chrome passes dates through in ISO1901 format regardless of locale 
    //and despite displaying in the specified format.

    return this.optional(element)
        || Globalize.parseDate(value, "dd/mm/yyyy", "en-GB")
        || Globalize.parseDate(value, "yyyy-mm-dd");
}});
于 2013-03-02T09:23:46.880 回答
-1

我可以建议你另一种解决方法,把它放在你的 web.config 中以避免不同的文化设置问题。

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/>

在 Jquery datepicker 中这就足够了,

 $(function () {
        $(".datepicker").datepicker({ dateFormat: "dd/MM/yyyy" });
 });
于 2013-03-01T03:26:59.337 回答
-1
$(function () {
        $(".datepicker").datepicker({ dateFormat: 'dd/mm/yy' });
 });
于 2013-11-26T10:55:08.407 回答