2015-10-20 420 views
1

我想填充@Html.EditorFor帮手。我已经创建了下面的属性仅在@ Html.EditorFor帮手中显示日期

[DataType(DataType.Date, ErrorMessage="Date only")] 
[DisplayFormat(DataFormatString = "{0:dd/MM/yy}", ApplyFormatInEditMode = true)] 
public DateTime? YearBought { get; set; } 

视图模型和我的助手是如下设置(一)

@Html.ValidationMessageFor(m => m.YearBought) 
@Html.EditorFor(model => model.YearBought, new { @type = "date" }) 

我也曾尝试(二)

@Html.ValidationMessageFor(m => m.YearBought) 
@Html.EditorFor(model => model.YearBought.Value.Date) 

使用上述格式(a)不显示任何内容。使用上述格式(b)12/05/2014 00:00:00以文本框格式显示。

我想实现无时间日期选择器的格式显示

我已审查其他一些问题,但不能看到我做了什么不同。

当我看着我的数据库,该值另存为2014-05-12,当我保存价值EditorFor助手生成所需的输入设备审查

firstsecondthird

问题的....不胜枚举

编辑 刚刚在Chrome浏览器开发工具的控制台,所以这个消息

指定的值“14年12月5日”不符合要求的格式,“YYYY-MM-DD”

我想DisplayFormat(DataFormatString = "{0:dd/MM/yy}"被定义如何显示我的约会?

+0

什么额外的'@ type'呢?在'@ Html.EditorFor(model => model.YearBought,new {@type =“date”})'你不能指定htmlattributes如果你使用EditorFor只是好奇 – JamieD77

+0

@type日期是最后一次尝试使它工作,没有其他的逻辑比这恐惧:( – tony09uk

回答

5

你需要使用ISO格式,采用type="date"

[DataType(DataType.Date, ErrorMessage="Date only")] 
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
public DateTime? YearBought { get; set; } 

这时候会显示在浏览器文化的日期。

请注意,没有必要添加@type = "date"。由于DataType属性,EditorFor()方法将添加。还要注意的是type="date"是在Chrome只支持(Firefox和IE浏览器将只产生一个正常的文本框)

如果你想显示在一个标准的文本框格式dd/MM/yyyy那么你可以使用

@Html.TextBoxFor(m => m.YearBought, "{0:dd/MM/yyyy}") 
+0

当我在编辑器中使用相同的语法,那么它不工作@ Html.EditorFor(m => m.YearBought,“{0:dd/MM/yyyy}”) –

+0

@AshishShukla,因为'EditorFor()'不支持这种语法,所有你需要的是'@ Html.TextBoxFor(m => m.YearBought)' - EditorFor()方法尊重'DataType'和'DisplayFormat '属性 –

0

我会使您的视图模型的YearBought财产a String为最简单的操作。服务器可以格式化日期,它可以在回发时进行解析,并且仍然可以使用DataType.Date数据注释进行jQuery验证。这也确保显示值在提交到视图之前就是你想要的。

0

对于HTML类型属性的替代,您可以在MVC中使用EditorTemplate将需要的标记,CSS和JS呈现为已知C#数据类型(如DateTime)的自定义编辑器。

这里是a walkthrough用于创建MVC自定义“EditorTemplate”(虽然不是一个日期数据类型,但概念是相同的)