Jquery 对en GB日期进行不引人注目的验证

Jquery 对en GB日期进行不引人注目的验证,jquery,asp.net-mvc,asp.net-mvc-4,unobtrusive-validation,jquery-globalization,Jquery,Asp.net Mvc,Asp.net Mvc 4,Unobtrusive Validation,Jquery Globalization,我正在使用asp.net MVC4设计一个数据输入表单,该表单的输入类型为date 使用chrome和jQueryUI datepicker中不引人注目的jQuery库,在选择正确的日期格式、使用datepicker(即2013年2月14日)并提交表单后,我仍然收到一个错误(字段news_date必须是日期) 有人建议我应该使用jQuery.globilization库。因此,在阅读之后,我添加了对以下脚本的引用 $(document).ready(function () { $.cul

我正在使用asp.net MVC4设计一个数据输入表单,该表单的输入类型为date

使用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>
它是有效的。因此,它显然是在POST或submit验证之前将日期存储在页面上的格式,这就是问题所在

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

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

我可以建议您另一种解决方法吗?请将此方法放在您的web.config中,以避免不同网络文化设置的问题


此解决方案似乎可以处理chrome和ie等。在chrome中,我无法键入错误的日期,因此日期选择器将给我一个有效日期,当它将其传递给验证程序函数时,它将采用YY-mm-dd格式。i、 e允许我直接输入或使用选择器,输入无效日期,即2013年2月30日(在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");
}});

我已经有了这个,除了两个编码属性。改变了这个,我还是得到了一样的。日期选择器允许我选择一个日期,它在显示中看起来是GB格式,但当它传递到验证程序时,它以yyyy-MM-dd格式传递。您能否尝试使用[HttpPost]属性装饰控制器。我们遇到了这样的问题-ssilas777不确定该建议是否有帮助,因为这都是客户端验证,在这一点上,它甚至没有通过一个GET或POST。我用Fiddler验证过了。你试过了吗,不引人注目的应该有ajax作为背景吗?谢谢你,我整天都在用头撞墙,这很有魅力。顺便说一句,我无法让它与最新版本的Globalize.js(v1.1.0)配合使用,因为它已全部更改为CLDR。但是,在旧版本v0.1.1中可以正常工作。
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/>
 $(function () {
        $(".datepicker").datepicker({ dateFormat: "dd/MM/yyyy" });
 });
$(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");
}});
$(function () {
        $(".datepicker").datepicker({ dateFormat: 'dd/mm/yy' });
 });