日期范围验证使控制变为日期时间输入类型,只需要文本类型

时间:2012-10-02 17:51:48

标签: asp.net-mvc validation razor controls

我有一个Razor网页,我有一个模型

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来执行日历日期选择,因为它是交叉broswer。有没有办法强制日期时间成为文本,即使使用验证类?谢谢!

2 个答案:

答案 0 :(得分:2)

我相信您只需要从DrawDate属性中删除DataType属性。

答案 1 :(得分:1)

由于您正在编写自定义验证,为什么不更改

public DateTime DrawDate { get; set; }

到字符串类型并相应地调整验证?