我会说你不应该仅仅依赖 Javascript,除非你在某种 Intranet 应用程序中控制你的客户端的浏览器。如果应用程序是面向公众的 - 确保您有客户端和服务器端验证。
此外,在模型对象中实现服务器端验证的更简洁的方法可以使用如下所示的自定义验证属性来完成。然后您的验证变得集中,您不必明确比较控制器中的日期。
public class MustBeGreaterThanAttribute : ValidationAttribute
{
private readonly string _otherProperty;
public MustBeGreaterThanAttribute(string otherProperty, string errorMessage) : base(errorMessage)
{
_otherProperty = otherProperty;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var otherProperty = validationContext.ObjectInstance.GetType().GetProperty(_otherProperty);
var otherValue = otherProperty.GetValue(validationContext.ObjectInstance, null);
var thisDateValue = Convert.ToDateTime(value);
var otherDateValue = Convert.ToDateTime(otherValue);
if (thisDateValue > otherDateValue)
{
return ValidationResult.Success;
}
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
}
然后可以将其应用于您的模型,如下所示:
public class MyViewModel
{
[MustBeGreaterThan("End", "Start date must be greater than End date")]
public DateTime Start { get; set; }
public DateTime End { get; set; }
// more properties...
}