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)
| 归档时间: |
|
| 查看次数: |
66086 次 |
| 最近记录: |