24

モデルに Datetime フィールドがあり、作成時にNow6 Years Priorの間に収まるように検証する必要があります。次のような範囲を使用してみました

[Range(DateTime.Now.AddYears(-6), DateTime.Now)]
public DateTime Datetim { get; set; }

しかし、これはエラーをスローし、システムの日時を倍精度に変換できません。モデル自体でこれに対する回避策を提案できる人はいますか?

4

3 に答える 3

34

Range型とその型の境界値を受け入れ、次のようなものを許可する属性のオーバーロードがありますが:

[Range(typeof(DateTime), "1/1/2011", "1/1/2012", ErrorMessage="Date is out of Range")]

この属性を使用して達成しようとしていることは不可能です。問題は、属性がパラメーターとして定数のみを受け入れることです。明らかに定数でも定数DateTime.NowでもありませんDateTime.Now.AddYears(-6)

ただし、独自の検証属性を作成してこれを行うこともできます。

public class DateTimeRangeAttribute : ValidationAttribute
{
    //implementation
}
于 2013-06-26T14:01:49.760 に答える
33

次の属性を使用します。

public class CustomDateAttribute : RangeAttribute
{
  public CustomDateAttribute()
    : base(typeof(DateTime), 
            DateTime.Now.AddYears(-6).ToShortDateString(),
            DateTime.Now.ToShortDateString()) 
  { } 
}
于 2013-06-26T13:52:28.557 に答える