0

私は自分の DateTime 属性にデータ検証を追加しようとしていますが、ユーザーがDateTime.Now1 年以内の日付を選択することを義務付けたいのです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; }

このカスタム検証は機能しません。検証は実行されません。本当に簡単なことを見逃していると思いますか?

4

2 に答える 2

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");
    }
  }
}

読んで、あなたに最適なものを見てください

于 2012-05-24T20:09:40.933 に答える
1

属性は本質的に静的です。検証のために独自の属性を作成することを検討しましたか? Web には、すぐに使用できるいくつかの例があります。

必要に応じて継承しRangeAttributeて注入することもできます。

于 2012-05-24T19:41:46.733 に答える