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

时间:2015-06-12 08:43:41

标签: jquery asp.net-mvc google-chrome datetime data-annotations

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

当我使用英国格式" dd / MM / YYYY"渲染带有日期类型输入的编辑表单时;使用谷歌浏览器时出现以下错误消息:

  

指定值' 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认为每个人都在英国,我将区域设置更改为英国,但仍会出现同样的问题。

一个简单的解决方法是将我的模型中的格式更改为通用格式,但对于英国用户来说这是一个小外星人。

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

6 个答案:

答案 0 :(得分:49)

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()用途

答案 1 :(得分:2)

答案 2 :(得分:2)

问题可能出在类型=“ date”。无论如何,这就是我的情况。将其更改为type =“ text”后即可工作。如果该接口是使用MVC包装器构建的,则需要相应地替换或设置html属性。

答案 3 :(得分:0)

我想在这里强调答案。

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

答案 4 :(得分:0)

type属性设置为文本。

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

答案 5 :(得分:0)

我面临着同样的问题 我做到了,它开始起作用

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