【问题标题】:Unable to validate date format on edit view in chrome无法在 chrome 中的编辑视图上验证日期格式
【发布时间】:2015-08-05 05:37:06
【问题描述】:

之前有人问过这个问题,但答案并没有解决我的问题。 问题是我总是在 datetime 字段中收到以下错误。

创建时间字段必须是日期。

我的尝试

这是我设置日期格式的模态

[Display(Name = "Created Time")]
[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> CreatedTime { get; set; }

查看代码

<div class="form-group">
    @Html.LabelFor(model => model.CreatedTime, "Timesheet Date")
    <div class='input-group date' id='Datetimepicker1'>
        @Html.TextBoxFor(model => model.CreatedTime, new { @class = "form-control" })
        <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span>
    </div>
    @Html.ValidationMessageFor(model => model.CreatedTime, "", new { @class = "text-danger" })
</div>

在js中

$('#CreatedTime').removeAttr("data-val-date");
$('#Datetimepicker1').datetimepicker({ format: 'DD/MM/YYYY' });

还尝试更改jquery.validate.js功能date: function (value, element)如下但无法解决问题。

if ($.browser.webkit) {
    //ES - Chrome does not use the locale when new Date objects instantiated:
    var d = new Date();
    return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
}
else {
    return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}

访问过的链接

The field must be a date - DatePicker validation fails in Chrome - mvc

The field date must be a date in mvc in chrome

还有更多链接和网站,但无法解决问题

【问题讨论】:

  • 您使用的是哪个日期选择器 - jquery-ui? (并且不要使用$('#CreatedTime').removeAttr("data-val-date");
  • @StephenMuecke 我正在使用 bootstrap datetimepicker 来显示日期
  • 参考this answer - 在加载 jquery 和引导程序后尝试添加脚本(但不在 document.ready 中)

标签: javascript jquery google-chrome date asp.net-mvc-5


【解决方案1】:

试试看

将此 js 代码保留在 $(document).ready(); 之外。仅在&lt;script&gt;Here&lt;/script&gt; 标记内。

    $(function () {
        $.validator.addMethod('date',
        function (value, element) {
            if (this.optional(element)) {
                return true;
            }
            var ok = true;
            try {
                $.datepicker.parseDate('dd/mm/yy', value);
            }
            catch (err) {
                ok = false;
            }
            return ok;
        });
        $("#ID").datepicker({ dateFormat: 'dd/mm/yy', changeYear: true });
    });    

希望对您有所帮助。就我而言,它正在工作。

【讨论】:

  • 我已将此代码放入 document.ready 函数中但无法正常工作
  • 请将此代码放在 document.ready 函数之外。只需将其放在 标记内即可,希望如此。
  • 感谢您的支持和解释它正在工作。
  • @GovindaRajbhar,您需要编辑答案并删除$(function () {line
  • @StephenMuecke 抱歉,但当我删除您建议的行时,会出现错误:- $(...).datepicker is not a function 所以我没有删除它。
【解决方案2】:

这对我有用:

(放在 _Layout.cshtml 上)

$(function () {
        $.validator.methods.date = function (value, element) {
            //Fix chrom Asp.Net MVC jQuery validation: The field "Myfield" must be a date.
            var ischrom = /chrom(e|ium)/.test(navigator.userAgent.toLowerCase());
            if (ischrom) {
                if ($.browser.webkit) {
                    //Chrome does not use the locale when new Date objects instantiated:
                    var d = new Date();
                    return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
                }
                else {
                    return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
                }
            }
            else
            {
                return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
            }
        };

    });

感谢:http://blog.mohnady.com/2015/02/fix-aspnet-mvc-chrome-jquery-validation.html

【讨论】:

    猜你喜欢
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多