0

我有一个 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 来进行日历日期选择,因为它是跨浏览器。即使使用验证类,有什么方法可以强制日期时间成为文本?谢谢!

4

2 回答 2

2

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

于 2012-10-02T18:42:39.370 回答
1

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

public DateTime DrawDate { get; set; }

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

于 2012-10-02T19:23:53.727 回答