我有一个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。有没有办法强制日期时间成为文本,即使使用验证类?谢谢!
答案 0 :(得分:2)
我相信您只需要从DrawDate属性中删除DataType属性。
答案 1 :(得分:1)
由于您正在编写自定义验证,为什么不更改
public DateTime DrawDate { get; set; }
到字符串类型并相应地调整验证?