【问题标题】:Razor DateField validation fails saying "must be a date"Razor DateField 验证失败说“必须是日期”
【发布时间】:2014-06-05 08:50:54
【问题描述】:

使用 jQuery datepicker 插件选择数据范围,创建一个带有两个日期字段的剃须刀表单,显示为文本框。开始日期工作正常,但结束日期验证失败并显示“字段结束日期必须是日期”。下面是模型代码和.cshtml代码:

    [Display(Name = "Start Date")]
    public Nullable<DateTime> startDate { get; set; }

    [Display(Name = "End Date")]
    public Nullable<DateTime> endDate { get; set; }

        <div id="dvDateRange">
            @Html.TextBoxFor(e => e.startDate, new { @class = "datepicker", Value = Model.startDate.Value.ToString("dd/MM/yyyy") })
            <span> to </span>
            @Html.TextBoxFor(e => e.endDate, new { @class = "datepicker", Value = Model.endDate.Value.ToString("dd/MM/yyyy") })
        </div>

两者设置相同,为什么开始日期成功而结束日期失败?

有什么想法吗?

编辑

所以绝对是文化问题,似乎是导致问题的 Chrome。 进行了以下修改,仍然遇到同样的问题。

型号代码:

    [Display(Name = "Start Date")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public Nullable<DateTime> startDate { get; set; }

    [Display(Name = "End Date")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public Nullable<DateTime> endDate { get; set; }

.cshtml代码:

        <div id="dvDateRange">
            @Html.EditorFor(e => e.startDate, new { @class = "datepicker", Value = Model.startDate.Value.ToString("dd/MM/yyyy") })
            <span> to </span>
            @Html.EditorFor(e => e.endDate, new { @class = "datepicker", Value = Model.endDate.Value.ToString("dd/MM/yyyy") })
        </div>

日期选择器代码:

    $("#dvDateRange input").datepicker({
        showOn: "button",
        buttonImage: "/Images/calendar.gif",
        buttonImageOnly: true,
        dateFormat: "dd/mm/yy"
    });

是否要覆盖 Chrome 中的文化设置?

【问题讨论】:

  • 很可能您在浏览器和服务器上有不同的文化。可能开始日期是正确的,因为日期小于 12(因此 2014 年 6 月 5 日是两种格式的有效日期:05/06/2014 和 06/05/2014)
  • 这似乎是明智的。如何强制它始终使用该格式?

标签: jquery asp.net-mvc asp.net-mvc-4 date razor


【解决方案1】:

为什么不使用

[Display(Name = "Start Date")] public DateTime? startDate { get; set; }

改为?

【讨论】:

    【解决方案2】:

    终于使用Asp.net MVC set validation date format fails on Chrome的代码完成了这项工作

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

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多