cLa*_*Lar 13 c# asp.net asp.net-mvc-4
我有一个包含两个DateTime属性的MVC4 Prject的ViewModel:
[Required]
[DataType(DataType.Date)]
public DateTime RentDate { get; set; }
[Required]
[DataType(DataType.Date)]
public DateTime ReturnDate { get; set; }
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来使用C#属性[Compare("someProperty")]来检查天气,RentDate属性的值是否早于ReturnDate的值?
Mik*_*han 25
这是一个非常快速的基本实现(没有错误检查等)应该做你要求的(仅在服务器端...它不会做asp.net客户端javascript验证).我没有测试过,但应该足以让你入门.
using System;
using System.ComponentModel.DataAnnotations;
namespace Test
{
[AttributeUsage(AttributeTargets.Property)]
public class DateGreaterThanAttribute : ValidationAttribute
{
public DateGreaterThanAttribute(string dateToCompareToFieldName)
{
DateToCompareToFieldName = dateToCompareToFieldName;
}
private string DateToCompareToFieldName { get; set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
DateTime earlierDate = (DateTime)value;
DateTime laterDate = (DateTime)validationContext.ObjectType.GetProperty(DateToCompareToFieldName).GetValue(validationContext.ObjectInstance, null);
if (laterDate > earlierDate)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("Date is not later");
}
}
}
public class TestClass
{
[DateGreaterThan("ReturnDate")]
public DateTime RentDate { get; set; }
public DateTime ReturnDate { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
看起来您正在使用 DataAnnotations 所以另一种选择是IValidatableObject在视图模型中实现:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (this.RentDate > this.ReturnDate)
{
yield return new ValidationResult("Rent date must be prior to return date", new[] { "RentDate" });
}
}
Run Code Online (Sandbox Code Playgroud)