2011-10-25 105 views
2

我在我的Model類中有一個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

在模型類:

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

您無法將DefaultValue設置爲DateTime.Now,因爲DateTime.Now是一種方法,我建議您更改默認構造函數以設置DateTo = DateTime.Now它將具有相同的效果。

+0

請參閱文檔http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx – maxfridbe

+0

DateTime.Now是屬性,絕對不是方法。即使它很冒險,情況是屬性需要編譯時間常量作爲參數。 – archil

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

但要小心,當返回View(),期望您的對象作爲模型。你應該總是傳遞像View(new MyObject())這樣的objcet,否則構造函數將不會被調用,並且在DateTo上你不會得到默認值。

您的代碼不會編譯,因爲屬性需要編譯時常量作爲參數。 DateTime.Now不是恆定的,所以編譯器符合。

9

在C#6或更高版本,你可以設置一個默認值自動屬性。

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

這在邏輯上等同於下面的代碼,用這個舊版本的C#,寫的只是簡短的形式。

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

以上兩種方式總會返回當前日期&時間。它將設置對象構建的時間並始終在那裏返回。要始終返回當前最新日期&時間,請使用get屬性。

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