2012-11-01 126 views
2

我正在使用實體框架4爲ASP.NET MVC3/Razor2 Web應用程序提供模型。我正在使用DataAnnotations來實現驗證。我需要將某些日期限制在SQL smalldatetime類型接受的範圍內。實體框架4數據註釋日期範圍驗證

我的問題是,我無法讓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日期選擇器以及有問題的字段。

任何人都可以幫忙嗎?

回答

1

您不指定發生錯誤的位置,但我的猜測是它是客戶端(?)jQuery驗證不適用於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 ExtensionsMVC Foolproof Validation,以查看它們是否可用於解決問題。

+0

謝謝@ Martin4ndersen。正如您預測的那樣,禁用視圖的JS驗證庫啓用了正確的驗證服務器端。本身,博客中顯示的自定義屬性提供了正確的服務器端驗證,並啓用了js。我將採取額外的打擊來實施它所建議的解決方法,以使客戶端支持也能正常工作。慚愧RangeAttribute和js不顯眼的驗證不能一起正常工作。希望在未來的MVC版本中看到這一點。 –