【发布时间】:2015-08-28 05:13:48
【问题描述】:
我有一个使用数据注释、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 认为每个英国人都在美国,我将区域设置更改为 UK,但仍然出现同样的问题。
一个简单的解决方法是将我的模型中的格式更改为通用格式,但对于英国用户来说,这有点陌生。
有没有办法告诉 chrome 接受“dd/MM/YYYY”中的日期格式?
【问题讨论】:
-
您是否要渲染浏览器的 HTML5 日期选择器实现(或者您是否使用 jquery 插件)?
-
我建议你使用
datepicker ui这样ISO格式发送到服务器,而dd/MM/dddd将在客户端配置。 -
@StephenMuecke 我打算让浏览器处理日期选择器,因此对第三方库的需求减少了。
-
如果您使用浏览器日期选择器,您需要将属性指定为
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyInEditMode = true)]。然后浏览器将在浏览器的区域设置中显示该值,但回发 ISO 格式以便正确绑定。但请注意,这仅在现代浏览器中受支持。 -
在使用 DisplayFor() 辅助方法时,这样做还会以通用格式呈现日期
标签: jquery asp.net-mvc google-chrome datetime data-annotations