en-GB日期的不引人注目的验证

时间:2013-02-28 22:41:47

标签: jquery asp.net-mvc asp.net-mvc-4 unobtrusive-validation jquery-globalization

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

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

有些searching建议我应该使用jQuery.globilization库。因此,在阅读documentation后,我添加了对以下脚本的引用。

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

UPDATE :顺便提一下,如果我将验证器方法更改为硬编码。 即。

$.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”并且我可以调试我的脚本并看到传递给它的值验证器方法它是这个值因此它不会匹配英国日期格式,从而返回null,而不是通过验证的值。那么我的问题是日期选择器如何在选择后存储日期?

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

3 个答案:

答案 0 :(得分:10)

此解决方法似乎处理chrome和ie等。在chrome中我无法键入错误的日期,因此日期选择器将给我一个有效的日期,当它传递给验证器函数时它将在yyyy-mm- dd格式。即让我直接输入输入或使用选择器,输入无效的日期,即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");
}});

答案 1 :(得分:-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" });
 });

答案 2 :(得分:-1)

$(function () {
        $(".datepicker").datepicker({ dateFormat: 'dd/mm/yy' });
 });