2012-04-06 15 views
1

ユーザーのモデルを作成しています。このプロパティをNow()に設定しました。ここに私のコードだ:MVCのプロパティに現在の日付を割り当てます。

[DefaultValue(DateTime.Now)] 
public DateTime joined {get; set;} 

私はエラーを取得する:

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type.

は私が間違って何をしているのですか?そして、私がしたいことをするための最善の方法は何ですか?

答えて

7

DateTime.Nowあなたが示唆しているものを行うことができない理由である、定数が、実行時に計算されていますプロパティではありません。

あなたはどちらかと提案しているものを行うことができます。

public class MyClass { 
    public DateTime joined { get; set; } 
    public MyClass() { 
    joined = DateTime.Now; 
    } 
} 

または:

public class MyClass { 
    private DateTime _joined = DateTime.Now; 
    public DateTime joined { get { return _joined; } set { _joined = value; } } 
} 
1

あなたのモデルクラスでこれを試みることができる:

private DateTime _joined = DateTime.Now; 
public DateTime Joined 
{ 
    get { return _joined; } 
    set { _joined = value; } 
} 
1

をあなたはデフォルト値の属性に式を設定することはできません。データアノテーションは実行時属性ではないためです。あなたは、あなたが他の人が提案するもののようにそれを行うことができます

このよう
private DateTime _joined = DateTime.Now; 
public DateTime Joined 
{ 
    get { 
     return _joined; 
    } 
    set { 
     _joined = value; 
    } 
} 
1

することにより、デフォルト値を設定する必要がありますが、別の代替は、ドメインへのビューモデルから、あなたのマッピングの後、ちょうどそれを追加する前に、あなたのアクションメソッドでそれを設定することですデータベース(これはあなたが何をする必要があるかである場合)に:

[HttpPost] 
public ActionResult Create(YourViewModel viewModel) 
{ 
    // Check if view model is not null and handle it if it is null 

    // Do mapping from view model to domain model 
    User user = ... // Mapping 
    user.DateJoined = DateTime.Now; 

    // Do whatever else you need to do 
} 

ユーザーのためのあなたのdomailモデル:

public class User 
{ 
    // Other properties here 

    public DateTime DateJoined { get; set; } 
} 

日ので、私は個人的にアクションメソッドでそれを設定しているだろうし、ユーザーがデータベースに実際に追加された時刻に近い時刻になります(これを実行すると仮定した場合)。 12時にユーザーオブジェクトを作成するとしたら、ユーザーがデータベースに追加された時間ですが、12時30分に送信ボタンをクリックすればどうなるでしょうか?むしろ12時30分より12時30分を好むだろう。

+0

私はこれがよりよい解決策であることに同意します。ユーザーはビューを開くことができ、DateTimeは設定されますが、キャッシング戦略によってはそのビューを長時間放置すると矛盾する可能性があります。私は個人的には、CreatedBy、CreatedDate、LastUpdatedBy、LastUpdatedDateプロパティを含むすべてのDTOに基本クラスDTOを使用します。これらはDBに永続化される直前に設定されます –

関連する問題