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

Jquery 指定的值不符合所需的格式yyyy MM dd,jquery,asp.net-mvc,google-chrome,datetime,data-annotations,Jquery,Asp.net Mvc,Google Chrome,Datetime,Data Annotations,我有一个.NETMVC5应用程序,它使用数据注释、实体框架jQuery2.1.3和jQueryUI1.11.4 当我使用英国格式“dd/MM/YYYY”呈现带有日期类型输入的编辑表单时;使用Google Chrome时出现以下错误消息: 指定的值“10/10/2001”不符合要求的格式“yyyy-MM-dd”。jquery-2.1.3.js:5317 型号 public class MyModel { [Column(TypeName = "date"), DataType(DataTy

我有一个.NETMVC5应用程序,它使用数据注释、实体框架jQuery2.1.3和jQueryUI1.11.4

当我使用英国格式“dd/MM/YYYY”呈现带有日期类型输入的编辑表单时;使用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; }
}
加价

<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" />

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

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

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


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

HTML5日期选择器的规范规定,日期必须采用格式
YYYY-MM-dd
(ISO格式)。这意味着您必须设置
DisplayFormatAttribute

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public string MyDate { get; set; }
或者,您可以使用手动添加格式

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

后面的选项允许您保留
DataFormatString=“{0:dd/MM/yyyy}”)
以便在
@Html.DisplayFor()

中使用。您可以使用inputAgHelper.Format

<input asp-for="MyDate" asp-format="{0:yyyy-MM-dd}" />


我想在这里强调一下答案中的一些内容


如果您正在构建一个具有全球化和本地化的应用程序,那么使用Html助手传递格式的方法会更好。您也可以只使用EditorFor并为datepicker传入必要的id或类。

类型属性设置为text

@Html.TextBoxFor(m => m.MyDate, new { @type = "text"  })

问题可能来自type=“date”。这就是我的处境。将其更改为type=“text”后工作。如果接口是用MVC包装器构建的,则需要相应地替换或设置html属性。

我也面临同样的问题 我这样做了,它开始工作

<input type="date" class="form-control text-box single-line" id="EndDate" name="EndDate" value=@Model.EndDate.ToString("yyyy-MM-dd") />


您是否希望呈现浏览器HTML5日期选择器实现(或者您正在使用jquery插件)?我建议您使用
日期选择器ui
,这样ISO格式将发送到服务器,而
dd/MM/ddddddd
将在客户端配置。@StephenMuecke我打算让浏览器处理日期选择器,因此,不需要第三方库。如果您使用浏览器日期选择器,则需要将属性指定为
[DisplayFormat(DataFormatString=“{0:yyyy-MM-dd}”,ApplyInEditMode=true)]
。然后,浏览器将在浏览器区域设置中显示该值,但会回发ISO格式,以便正确绑定。但请注意,这仅在现代浏览器中受支持。在使用DisplayFor()helper方法时,这样做也会以通用格式呈现日期。有没有比加载页面后使用JS重新格式化框更简单的解决方法<代码>[DisplayFormat]
导致jQuery重置字段并在控制台中给出无效值消息。在
TextBoxFor
中格式化它可以解决此错误(并允许我应用掩码插件),但仍然以ISO格式显示日期。在domReady上,我移动了这些值以使用美式格式。@Sinjai,对不起,我不理解你的评论<代码>[DisplayFormat]和jQuery在任何情况下都不相关(它不会重置值),此问题/答案与浏览器HTML-5日期选择器实现相关(它与掩码插件无关)。如果你有问题,然后问一个新的问题,并附上相关的细节。是的,可能太多了,不能在评论中置之不理。不过,对于一个问题,我没有更好的表达方式。jQuery在ASP.NETMVC项目中用于验证,我想这就是最让人抓狂的地方。控制台只是说错误源于jquery-version.js。别担心。我知道这是一个老问题,但我希望得到答案,写一个正式的问题是愚蠢的
ApplyFormatInEditMode=true
用于将格式保持在
@Html.EditorFor()
中,对吗?那么,当我试图用
DateTime
[DisplayFormat(DataFormatString=“{0:yyyyy-MM-dd}”,ApplyFormatInEditMode=true)]填充
@Html.EditorFor()
时,为什么控制台中仍然会出现这个错误(问题中的那个错误)
。。。。有什么想法吗?或者我把
编辑模式
与其他模式混淆了吗?@FllnAngl,如果它对你不起作用,那么我只能假设你有其他代码,或者你没有告诉我们导致问题的东西。我怎么能只对Chrome这样做呢。但不是我?