如何通过属性验证一个日期在我的MVC模型中比另一个更大?

时间:2013-08-19 15:27:42

标签: validation asp.net-mvc-4

我的模型代码中有以下内容

    [Required]
    public DateTime? PreferredShowDate1 { get; set; }

    public DateTime? PreferredShowDate2 { get; set; }

    public DateTime? PreferredShowDate3 { get; set; }

现在,我想确保PreferredShowDate1< PreferredShowDate2< PreferredShowDate3 并且这3个日期都不相同。

是否可以在型号代码中执行此操作?我可以这样做吗?

//put in some code in attribute to compare preferredShowDate2 with preferredShowDate1      
[compare]
public DateTime? PreferredShowDate2 { get; set; }

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

查看万无一失的验证

http://foolproof.codeplex.com/

允许您访问greaterthan / lessthan验证属性以及一系列有用的其他属性

答案 1 :(得分:0)

您可以使用IValidatableObject接口执行此类验证。

public class MyClass : IValidatableObject
{
    public DateTime? PreferredShowDate1 { get; set; }

    public DateTime? PreferredShowDate2 { get; set; }

    public DateTime? PreferredShowDate3 { get; set; }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    //Example compare stuff. Your needs may vary.
    if ((DateTime.Compare(PreferredShowDate1, PreferredShowDate2) < 0) && 
     (DateTime.Compare(PreferredShowDate2, PreferredShowDate3) < 0))
    {
         yield return new ValidationResult("Invalid Date", new[] { "PreferredShowDate1" });
    }
}