指定的值不符合所需的格式yyyy-MM-dd

And*_*ark 39 asp.net-mvc jquery datetime google-chrome data-annotations

我有一个使用Data Annotations,Entity-Framework Jquery 2.1.3和Jquery UI 1.11.4的.Net MVC 5应用程序.

当我使用英国格式"dd/MM/YYYY"渲染类型为date的输入的编辑表单时; 使用Google Chrome时出现以下错误消息:

指定值'10/10/2001'不符合所需格式'yyyy-MM-dd'.jQuery的2.1.3.js:5317

模型

public class MyModel
{
    [Column(TypeName = "date"), DataType(DataType.Date), Display(Name = "My date")]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public string MyDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

标记

<input class="text-box single-line" data-val="true" data-val-date="The field My date must be a date." id="MyDate" name="MyDate" type="date" value="10/10/2001" />
Run Code Online (Sandbox Code Playgroud)

在输入控件中正确设置了该值,但日期未显示在浏览器中.我首先认为这是jQuery的一个问题,因为它出现了jQuery脚本文件,但在IE和Firefox中测试时一切正常.

然后我认为这是我在Chrome中的区域设置,因为默认情况下Chrome认为每个人都在英国,我将区域设置更改为英国,但仍会出现同样的问题.

一个简单的解决方法是将我的模型中的格式更改为通用格式,但对于英国用户来说,这有点陌生.

有没有办法告诉chrome接受"dd/MM/YYYY"中的日期格式?

小智 53

HTML5日期选择器的规范规定日期必须采用格式yyyy-MM-dd(ISO格式).这意味着你DisplayFormatAttribute一定是

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public string MyDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用手动添加格式

@Html.TextBoxFor(m => m.MyDate, "{0:yyyy-MM-dd}", new { @type = "date"  })
Run Code Online (Sandbox Code Playgroud)

后一个选项允许您保留DataFormatString = "{0:dd/MM/yyyy}")for用法@Html.DisplayFor()


小智 19

您不需要任何 jquery 或 ASP 功能来修复它。简单的 JS 就可以了。问题是浏览器需要格式 yyyy-mm-dd。

并且 toLocaleString 不允许日期采用这种格式。所以经过搜索我发现这是ISO格式,我们可以使用Date().toISOString()来获取所需格式的日期。

我使用切片方法来提取日期部分只是因为 Date().toISOString() 返回带有时间的日期。

我的代码:

date: new Date().toISOString().slice(0, 10)
Run Code Online (Sandbox Code Playgroud)


小智 7

问题可能来自 type="date"。反正我的情况就是这样。将其更改为 type="text" 后即可使用。如果接口是用 MVC 包装器构建的,则需要相应地替换或设置 html 属性。