数据注释自定义属性[DateTime]

时间:2012-05-24 19:40:04

标签: asp.net-mvc data-annotations

我试图将数据验证添加到我的DateTime Attribut我想让用户选择DateTime.Now之间的日期,然后在DateTime.now.addyears(+1)之后的一年之后选择日期 这是我的代码:

 public class DateDebut : ValidationAttribute
        {
            public override bool IsValid(object value)
            {
                if (value == null) return false;
                DateTime enteredDate = (DateTime)value;

                if ( (enteredDate >= DateTime.Now) && (enteredDate <= DateTime.Now.AddYears(+1)))
                    return true;
                else
                    return false;
            }
        }
        [Required]
        [Display(Name = "De : ")]
        [DataType(DataType.Date)]
        [DateDebut(ErrorMessage="Date invalide")]
        public DateTime dd { get; set; }

这个自定义验证没有工作,验证没有被执行,我认为我错过了一些简单的事情?

2 个答案:

答案 0 :(得分:2)

我同意丹尼尔,

但是我发现当我需要对模型中的属性进行比较时,我使用IValidatableObject

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.ivalidatableobject.aspx

对于大多数小型比较,我发现它更快更容易 你会有一些看起来像这样的

public class myModel : IvalidatableObject
{
 string debut = DateTime.Now.ToShortDateString();
 string fin = DateTime.Now.AddYears(+1).ToShortDateString(); 
 [Required]
 [Display(Name = "De : ")]
 [DataType(DataType.Date)]
 public DateTime dd { get; set; }

  public IEnumerable<ValidationResult> Validate()
  {
    if(this.debut > this.fin)
    {
      yield return new ValidationResult("debut cannot be greated then fin");
    }
  }
}

阅读并了解最适合您的内容

答案 1 :(得分:1)

属性本质上是静态的。您是否考虑过编写自己的属性进行验证?网上有几个例子可以让你入门。

您也可以继承RangeAttribute并根据需要注入。