2011-10-25 3 views
2

私のモデルクラスの1つにDateTimeプロパティがあり、デフォルトの値をNowに設定したいとします。以下のコードは私が期待していたものですが、コンパイルされません。 System.DateTime.Nowコールは好きではありません。MVC3 DateTimeプロパティのデフォルト値

[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] 
    [Display(Name = "To Date")] 
    [Required(ErrorMessage = "To Date is required.")] 
    [DefaultValue(System.DateTime.Now)] 
    public DateTime DateTo { get; set; } 

アイデアはありますか?

+1

実際に投稿を二重にする必要がありましたか? http://stackoverflow.com/questions/7891519/mvc3-htmlhelper-defaults – Henry

答えて

11
モデルクラスで

public DateTime Date { get; set; } = DateTime.Now; 

これは論理的には以下のコードと同じですが、古いバージョンのC#ではこれを使って書いています。

private DateTime _date = DateTime.Now; 
public DateTime Date 
{ 
    get { return _date; } 
    set { _date = value; } 
} 

上記の2つの方法は、常に現在の日付&の時刻を返します。オブジェクトが構築された時刻を設定し、その時刻を常に返します。現在の最新の日付を常に返すには、&時間にgetプロパティを使用します。

public DateTime Date 
{ 
    get { return DateTime.Now; } 
} 
1

DateTime.Nowがメソッドであるため、DefaultValueをDateTime.Nowに設定できません。デフォルトのコンストラクタを設定してDateTo = DateTime.Nowを設定すると、同じ効果が得られます。

+0

ドキュメントを参照してください。http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx – maxfridbe

+0

DateTime.Now is Property 、確かに方法ではありません。そして、それは有益でも、属性は、時定数をパラメータとしてコンパイルする必要があります。 – archil

2
ctor() 
{ 
    DateTo = DateTime.Now; 
} 

View()あなたのオブジェクトをモデルとして返すときは、注意してください。 objcetは常にView(new MyObject())のように渡す必要があります。それ以外の場合はコンストラクタは呼び出されず、デフォルト値はDateToになりません。

属性はコンパイル時の定数をパラメータとして必要とするため、コードはコンパイルされません。 DateTime.Nowは定数ではないため、コンパイラが準拠しています。 C#6で

private DateTime _date = DateTime.Now; 
public DateTime Date 
{ 
    get { return _date; } 
    set { _date = value; } 
} 
9

以上、あなたは自動プロパティにデフォルト値を設定することができます。

関連する問題