2012-04-06 31 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:00創建用戶對象,那麼這將是您將用戶添加到數據庫的時間,但如果您只在12:30點擊提交按鈕,該怎麼辦?我寧願12點30分而不是12點。

+0

我同意這是更好的解決方案,用戶可以打開查看並設置日期時間,但如果他們根據您的緩存策略長時間保留該視圖,則可能會不一致。我個人使用一個基類DTO,所有DTO派生自包含CreatedBy,CreatedDate,LastUpdatedBy,LastUpdatedDate屬性的基類DTO。這些會在被保存到數據庫之前設置 – 2012-04-06 18:36:38

相關問題