Razor DateField验证失败,说“必须是约会”

时间:2014-06-05 08:50:54

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

使用jQuery datepicker插件选择数据范围,将剃须刀表单显示为两个日期字段作为文本框。开始日期工作正常,但结束日期未通过验证,并说"字段结束日期必须是日期。"下面是Model代码和.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>

Datepicker代码:

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

无论如何都要在Chrome中覆盖文化设置?

2 个答案:

答案 0 :(得分:1)

为什么不使用

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

代替?

答案 1 :(得分:0)

最后使用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;
        });