Ben*_*Ben 6 c# validation entity-framework data-annotations asp.net-mvc-3
我看到有一些类似的问题,但没有一个能解决我的问题.
我正在使用Entity Framework 4.3开发MVC3应用程序.我有一个英国日期字段,我计划允许用户使用Jquery UI datepicker进行编辑(由于这个博客我得到了工作).
幸运的是,这个博客包含了使用英国格式制作日期选择器的说明,但是,EF验证仍然告诉我需要输入有效的日期格式.很奇怪,它并没有阻止我将日期提交给数据库,只是不显眼的验证开始并显示消息.
目前我有以下数据注释:
[DataType(DataType.Date)]
public System.DateTime Module_Date { get; set; }
Run Code Online (Sandbox Code Playgroud)
但我也试过添加:
[DisplayFormat(DataFormatString="{0:dd/MM/yyyy}")]
Run Code Online (Sandbox Code Playgroud)
这完全没有效果.我希望有人有一个解决方案,因为我不喜欢关闭不引人注意的验证来停止此错误消息.
谢谢
编辑
在@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;
}
}
Run Code Online (Sandbox Code Playgroud)
Application_Start()在Global.asax.cs文件的方法中使用此方法:
ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder());
Run Code Online (Sandbox Code Playgroud)
是的,问题在于 jquery 验证脚本坚持使用美国日期格式。不过,我会克制自己,不要对世界上大多数人使用 dd/mm/yyyy 的事实进行适当的咆哮。
不管怎样,最终我在类似问题的答案的评论中找到了我的困境的答案,该问题的作者好心地写了一篇关于他如何解决这个问题的博客文章。
基本上我已经使用了jquery 全球化脚本并将文化设置为en-GB. 我应该提到的是,在他的博客中,他没有提到在哪里放置指定区域性的位,因此我只是将页面中的脚本标记插入到全球化脚本的引用下:
<script src="@Url.Content("~/Scripts/globalize.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/globalize.culture.en-GB.js")" type="text/javascript"></script>
<script type="text/javascript">
Globalize.culture("en-GB");
$.validator.methods.date = function (value, element) {
return this.optional(element) || Globalize.parseDate(value);
};
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3723 次 |
| 最近记录: |