2012-10-02 41 views
0

我有一個剃刀網頁,我有做驗證的日期時間日期範圍驗證使得控制轉成日期時間輸入類型,只是想文本類型

然而,在一個模型

public class UploadModel 
{ 
    [Required] 
    [StringLength(25)] 
    public string PatientID { get; set; } 
    [DataType(DataType.Date)] 
    [DateRange("1000/12/01", "4010/12/16")] 
    public DateTime DrawDate { get; set; } 
} 
public class DateRangeAttribute : ValidationAttribute 
{ 
    private const string DateFormat = "yyyy/MM/dd"; 
    private const string DefaultErrorMessage = 
    "'{0}' must be a date between {1:d} and {2:d}."; 

    public DateTime MinDate { get; set; } 
    public DateTime MaxDate { get; set; } 

    public DateRangeAttribute(string minDate, string maxDate) 
     : base(DefaultErrorMessage) 
    { 
     MinDate = ParseDate(minDate); 
     MaxDate = ParseDate(maxDate); 
    } 

    public override bool IsValid(object value) 
    { 
     if (value == null || !(value is DateTime)) 
     { 
      return true; 
     } 
     DateTime dateValue = (DateTime)value; 
     return MinDate <= dateValue && dateValue <= MaxDate; 
    } 
    public override string FormatErrorMessage(string name) 
    { 
     return String.Format(CultureInfo.CurrentCulture, 
     ErrorMessageString, 
     name, MinDate, MaxDate); 
    } 

    private static DateTime ParseDate(string dateValue) 
    { 
     return DateTime.ParseExact(dateValue, DateFormat, 
     CultureInfo.InvariantCulture); 
    } 
} 

視圖, 當我通過在模型中的所有元素運行

@Html.EditorFor(m => m) 

這是因爲我使用jquery d創建其產生的問題中的日期時間型o日曆選擇,因爲它是交叉的。任何方式強制日期時間成爲一個文本,即使與驗證類?謝謝!

回答

1

既然你寫你自定義的驗證,你爲什麼不改變

public DateTime DrawDate { get; set; } 

字符串類型,並相應地調整你的驗證?

+0

多數民衆贊成多麼我最終不得不做的,我只是想知道是否有一些擴展類,我可以添加在這將照顧它 – Badmiral

+1

你可以保留DateTime類型並使用類似[Range(typeof(DateTime ),「1/2/2000」,「3/4/2001」,ErrorMessage =「{0}的值必須在{1}和{2}」)]之間。這樣你可能不需要自定義驗證類。另外,如果你對字符串日期的關注只是爲了顯示目的,那麼你可以使用DisplayFormat屬性來進行從DateTime到字符串的轉換,如下所示:[DisplayFormat(ApplyFormatInEditMode = true,DataFormatString =「{0: YYYY/MM/DD}「)] – utsavized

2

我相信你只需要從DrawDate屬性中刪除DataType屬性。

相關問題