【发布时间】:2012-04-13 08:42:12
【问题描述】:
我看到有一些类似的问题,但没有一个能解决我的问题。
我正在使用 Entity Framework 4.3 开发 MVC3 应用程序。我有一个英国日期字段,我计划允许用户使用 Jquery UI 日期选择器进行编辑(感谢this blog,我开始工作了)。
对我来说幸运的是,此博客包含有关使用英国格式制作日期选择器的说明,但是,EF 验证仍然告诉我需要输入有效的日期格式。奇怪的是,它并没有阻止我向数据库提交日期,它只是启动并显示消息的不显眼的验证。
目前我有以下数据注释:
[DataType(DataType.Date)]
public System.DateTime Module_Date { get; set; }
但我也尝试过添加:
[DisplayFormat(DataFormatString="{0:dd/MM/yyyy}")]
根本没有效果。我希望有人有一个解决方案,因为我不想关闭不显眼的验证来阻止这个错误消息。
谢谢
编辑
在@Iridio 回答之后,我考虑添加一个模型绑定,实际上,从我读过的几篇像这样的帖子来看,这似乎是正确的做法,但我想出的却没有效果。这是我尝试过的:
public class DateTimeBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var date = value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture);
return date;
}
}
在Global.asax.cs 文件的Application_Start() 方法中使用这个:
ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder());
【问题讨论】:
-
我相信您指的是 System.ComponentModel.DataAnnotations 而不是 EntityFramework 数据注释?如果您关注博客,那么您是否在客户端脚本中指定数据格式
{dateFormat: "dd/mm/yy"}?如果是这样,您使用的是什么版本的 jquery ui 脚本? -
哦,你说得很对,我正在使用 ComponentModel 的。我习惯在上一个项目中使用 EF 的。将更新。我使用的是 jquery ui 1.8.7,但我已根据您在下面的回答更新到最新版本,但无济于事
-
哦,是的,我指定了
{dateFormat:"dd/mm/yyyy"} -
澄清一下,是客户端验证(而不是服务器端验证)抱怨日期格式不正确? 验证仍然告诉我需要输入有效的日期格式。我走这条路的原因是我这周在同一个博客上遇到了这个问题。
-
是的,没错,我应该更清楚。它是客户端验证。创建页面的默认值设置为今天的日期(13/4/2012,对美国无效),如果您不更改它并单击保存,它将很乐意将其添加到数据库中
标签: c# asp.net-mvc-3 entity-framework validation data-annotations