我使用视图模型开始和结束日期并使用数据注释进行验证。验证规则是:开始和结束日期的数据注释
- 开始日期不应该大于结束日期和不为空,空
- 结束日期应不小于开始日期和不低于 DateTime.Now并且不为空,空
以下视图模型由startdate和enddate属性组成。混乱的是,我怎么能在下面的代码在结束日期的数据注解传递结束日期值的值StartEndDateRange数据注释和起始日期值:
public class StartEndDate
{
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[StartEndDateRange("2000/01/01", "value of end date properties")]
public DateTime StartDate { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[StartEndDateRange("value of startdate properties", DateTime.Now.ToString("yyyy/MM/dd"))]
public DateTime EndDate { get; set; }
}
public class StartEndDateRangeAttribute : 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 StartEndDateRangeAttribute(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);
}
}
谢谢我明白了。但是我必须在dataannotation中为结束日期的值放置:'[StartEndDateRange(“2000/01/01”,“结束日期属性的值”)]' – CodeManiac
取代*“结束日期属性的值”*?没有。只是'[StartEndDateRange(“2000/01/01”)]'。告诉我你是否需要更多的解释。 – Mohayemin
@CodeManiac:编辑 – Mohayemin