我花了几个小时阅读了很多文章,但我仍然无法解决我的问题。
我的模型中有一个DateTime
类型属性:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public System.DateTime StartTime { get; set; }
我已将格式设置为dd/MM/yyyy
,因此我希望接受像 14/12/2014 这样的日期。但是,验证总是失败并显示以下消息:The field StartTime must be a date.
我尝试输入 12/14/2014 并且没关系。
在阅读了几篇文章之后,我尝试用剃刀代码编辑格式,例如:
@Html.TextBoxFor(model => model.StartTime, "{0:dd/MM/yyyy}")
并尝试像 ataravati 在下面的答案中所说的那样使用 EditorFor:
@Html.EditorFor(model => model.StartTime)
或者,将文化更改为web.config
日在月之前的文化,例如 GB:
<system.web>
<globalization uiCulture="en" culture="en-GB"/>
</system.web>
但是,它们都不适合我。
我尝试仅使用文本输入并手动输入日期(不使用 jqueryUI 之类的任何控件)。但是,如果它是 dd/MM/yyyy 格式,验证仍然不接受我的手动输入。谁能告诉我这个问题或告诉我找出问题所在的方法?
更新:对于可能和我有同样问题的人。
在斯蒂芬下面提到的帖子之后,我们必须创建一个“日期”验证来覆盖默认的注释验证。我们创建的自定义验证将允许我们想要的格式。
但是,在那之后,发布到控制器的数据可能不包含该数据(在我的情况下,所有日期时间值都设置为默认日期时间)。原因是文化设置不接受您的格式。我们可以更改 web.config 中的文化设置,但我认为这不是最好的方法,因为它会影响您项目中的其他值类型(货币、数字....)。以我的方式,我创建了一个自定义 ModelBinder,用于以正确的格式绑定 Datetime(此处的示例:http: //www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder)。
上面的解决方案看起来很复杂。它不应该只是为了通过验证,但到目前为止,我没有找到更好的东西。因此,如果有人有更好的解决方案,让注释验证正确验证日期时间值的格式,请分享。