在EN-GB日期不显眼的验证(Unobtrusive Validation on en-GB Dat

2019-07-20 18:04发布

我使用具有型日期的输入asp.net MVC4设计数据输入形式。

使用镀铬和jQueryUI的日期选择我仍然得到一个错误(该场news_date必须是日期。)不显眼的jQuery库,选择正确的日期格式之后,使用日期选择器(即14/02/2013),并提交表单。

一些搜索建议我应该使用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");
    }
});

但是我仍然得到错误

如果我在铬调试上面的代码中,我可以看到,价值“的值)为‘2014年2月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>

更新 :顺便说一句,如果我改变我的验证的方法来进行硬编码。 即

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

有用。 因此,它肯定似乎是日期被存储到发布或提交验证这是问题之前页面上的格式。

选择,如果我运行日期后更新 $('#news_date').val()在Chrome控制台,我得到“2014年2月14日”,我可以调试我的剧本,看到了价值传递它的验证方法,它是该值,因此它不匹配因而英国日期格式返回一个空值,而不是这将通过验证的值。 所以,是我与日期选择器是如何存储选择之后的日期问题?

有没有人在Chrome中发现了一个解决方法呢?

Answer 1:

这种解决方法似乎处理Chrome和IE等。在铬我不能输入一个不正确的日期,因此日期选择器会给我一个有效的日期,当它把它传递给验证功能也将在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");
}});


Answer 2:

我可以建议你周围的其他工作,在你的web.config将这个以避免与differenet区域性设置的问题。

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

而在jQuery的日期选择器,这将是足够的,

 $(function () {
        $(".datepicker").datepicker({ dateFormat: "dd/MM/yyyy" });
 });


Answer 3:

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


文章来源: Unobtrusive Validation on en-GB Dates