Asp.net mvc 日期范围验证使控件变成日期时间输入类型,只需要文本类型
我有一个剃须刀网页,我有一个模型Asp.net mvc 日期范围验证使控件变成日期时间输入类型,只需要文本类型,asp.net-mvc,validation,razor,controls,Asp.net Mvc,Validation,Razor,Controls,我有一个剃须刀网页,我有一个模型 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
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);
}
}
它创建了一个datetime类型,这会产生问题,因为我使用jquery来选择日历日期,因为它是跨浏览器的。有没有办法强制datetime成为文本,即使使用验证类?谢谢 我认为您只需要从DrawDate属性中删除DataType属性。我认为您只需要从DrawDate属性中删除DataType属性。既然您正在编写自定义验证,为什么不进行更改
public DateTime DrawDate { get; set; }
设置为字符串类型并相应地调整验证?既然您正在编写自定义验证,为什么不进行更改
public DateTime DrawDate { get; set; }
创建一个字符串类型并相应地调整您的验证?这就是我最后不得不做的,我只是想知道是否有一些扩展程序类可以添加进来,可以处理它。您可以保留DateTime类型,并使用类似于[Range(typeof(DateTime),“1/2/2000”,“3/4/2001”,ErrorMessage=“Value for{0}必须介于{1}和{2}”)]之间。这样,您可能不需要自定义验证类。另外,如果您对日期字符串的关注只是出于显示目的,那么您可以使用DisplayFormat属性为您执行从DateTime到字符串的转换,例如:[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:yyyy/mm/dd}”)]这就是我最后必须做的事情,我只是想知道我是否可以添加一些扩展类来处理它。您可以保留DateTime类型,并使用类似于[Range(typeof(DateTime),“1/2/2000”,“3/4/2001”,ErrorMessage=“0}的值必须介于{1}和{2}”)的内容。这样,您可能不需要自定义验证类。另外,如果您对日期字符串的关注只是出于显示目的,那么您可以使用DisplayFormat属性为您执行从DateTime到字符串的转换,类似:[DisplayFormat(ApplyFormatInEditMode=true,DataFormatString=“{0:yyyy/mm/dd}”)]