1

好的,我知道这个问题已经被问过,被过,被过,但我错过了一些东西,似乎无法弄清楚,因为尽管当我尝试提交诸如 13/04/ 之类的日期时,日期选择器看起来是正确的2013 年验证开始并说

[Date Due] 字段必须是日期

我有一个日期编辑器模板

@model DateTime?

@Html.TextBox("", (Model.HasValue ? 
       Model.Value.ToShortDateString() : 
       string.Empty), new { @class = "datepicker" })

视图模型

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
[DisplayName("Date Due")]
public DateTime? DueDate { get; set; }

和 jQuery

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

当我输入 css 类为 的字段时会弹出日期选择器datepicker,我可以在日期选择器中选择一个日期,例如 2013 年 4 月 13 日,该值显示在文本框中,但提交时验证失败。

我在哪里错过了什么?

4

3 回答 3

0

以下链接有帮助吗?这意味着DisplayFormatAttribute您仅用于显示日期,并且不会自动应用于设置 ViewModel 属性,除非您指定ApplyFormatInEditMode. MVCx 不是很好,所以只是猜测。

于 2013-03-31T21:20:21.050 回答
0

验证的问题是 jQuery Validate 不理解文化。

对于日期,它只调用 javascript:new Date( value )对(某些)英国日期失败。

因此,您需要将全球化添加到客户端验证器 - 请参阅我对这个问题的回答:

根据 MVC 中的文化的 DateTime 格式

于 2013-03-31T21:20:25.010 回答
0

对于我的问题的答案,我不能得到任何功劳;但对我有用的解决方案是MVC DateTime validation - UK Date format 的公认答案,并且是

为日期重载不显眼的 JavaScript 验证方法

一旦我将链接的帖子放入我的脚本文件中,链接的帖子就有对我有用的脚本。

我不确定这是否是必需的,因为正如@Nicholas Butler 所说

jQuery Validate 不了解文化。

或者如果是因为我习惯[DisplayFormat(DataFormatString = "{0: dd MMM yyyy}")]将日期显示为 2013 年 4 月 20 日,而不是指出的 20/04/2013

{0:dd/mm/yyyy} 应该是 {0:dd/MM/yyyy} 因为 mm 表示分钟,而不是月份:

所以可能是日期格式之间的差异导致了我的问题

于 2013-03-31T21:45:05.433 回答