I have a DateTime property on one of my Model classes and want to set it's default vaule to Now. The below code is what I had hoped would work but won't compile. It doesn't like the System.DateTime.Now call:
[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; }
Any ideas?
In the model class:
private DateTime _date = DateTime.Now;
public DateTime Date
{
get { return _date; }
set { _date = value; }
}
In C# 6 or higher you can set a default value to an auto property.
public DateTime Date { get; set; } = DateTime.Now;
This is logically the same as the below code, use this for older version of C#, just shorter way of writing.
private DateTime _date = DateTime.Now;
public DateTime Date
{
get { return _date; }
set { _date = value; }
}
The above two ways will always return the current date & time. It will set the time when the object is constructed and always return that time there after. To always return the current latest date & time use a get property.
public DateTime Date
{
get { return DateTime.Now; }
}
ctor()
{
DateTo = DateTime.Now;
}
But beware, when returning View()
that expects your object as model. You should always pass the objcet like View(new MyObject())
, otherwise constructor won't be invoked and you won't get default value on DateTo
.
Your code does not compile because Attributes need compile-time constants as parameters. DateTime.Now
is not constant, so compiler complies.
You are not able to set DefaultValue to DateTime.Now because DateTime.Now is a method, I suggest you change the default constructor to set DateTo = DateTime.Now it will have the same effect.