【问题标题】:Date range validation with Entity Framework 4 data annotations使用 Entity Framework 4 数据注释进行日期范围验证
【发布时间】:2015-10-15 17:30:31
【问题描述】:

我正在使用 Entity Framework 4 为 ASP.NET MVC3 / Razor2 Web 应用程序提供模型。我正在使用 DataAnnotations 来实现验证。我需要将一些日期限制在 SQL smalldatetime 类型接受的范围内。

我的问题是我无法让 RangeAttribute 为日期字段正常工作。相关字段的模型元数据定义为:

    [Display(ResourceType = typeof(Resources.Patient), Name = "DateOfBirth_Name")]
    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    [DataType(DataType.Date)]
    [Range(typeof(DateTime), "01/01/1900", "06/06/2079", ErrorMessageResourceType = typeof(Resources.Patient), ErrorMessageResourceName = "DateOfBirth_Range")] 
    public System.DateTime DateOfBirth { get; set; }

使用此代码,无论我在日期字段中输入什么值,应用程序都会将其视为无效。如果它是相关的,我也将 JQuery-UI 日期选择器与相关字段一起使用。

有人可以帮忙吗?

【问题讨论】:

    标签: asp.net-mvc entity-framework-4 data-annotations


    【解决方案1】:

    您没有指定错误发生的位置,但我的猜测是它是客户端(?)jQuery Validation 不适用于RangeAttribute。要进行验证,请禁用 jQuery 验证,并且有效输入应通过(服务器)验证。

    要解决这个问题,您必须编写自己的日期范围验证,例如http://blogs.msdn.com/b/stuartleeks/archive/2011/01/25/asp-net-mvc-3-integrating-with-the-jquery-ui-date-picker-and-adding-a-jquery-validate-date-range-validator.aspx

    或者,您可以查看 Data Annotations Extensions 或 MVC Foolproof Validation 等软件包,看看它们是否可用于解决问题。

    【讨论】:

    • 感谢@Martin4ndersen。如您所料,禁用视图的 JS 验证库会启用正确的服务器端验证。就其本身而言,博客中显示的自定义属性提供了正确的服务器端验证,并启用了 js。我将采取额外的措施来实施它建议的解决方法,以使客户端支持也能正常工作。遗憾的是 RangeAttribute 和 js 不显眼的验证不能一起正常工作。希望在未来的 MVC 版本中修复该问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多