我使用視圖模型開始和結束日期並使用數據註釋進行驗證。驗證規則是:開始和結束日期的數據註釋
- 開始日期不應該大於結束日期和不爲空,空
- 結束日期應不小於開始日期和不低於 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