2012-10-02 27 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属性。