将当前日期分配给MVC中的属性

我正在为用户创建一个模型,我希望连接的属性设置为Now()。 这是我的代码:

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

我收到错误:

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式。

我究竟做错了什么? 什么是做我想要的最好的方法?

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; } } } 

您可以在模型类中尝试:

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

您不能将表达式设置为默认值属性。 因为dataannotaions不是运行时属性。 您应该像这样设置默认值

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

您可以像其他人建议的那样执行此操作,但另一种方法是在从视图模型映射到域之后以及在将其添加到数据库之前(如果这是您需要执行的操作)在操作方法中设置它:

 [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; } } 

我个人会在action方法中设置它,因为日期和时间会更接近用户实际添加到数据库的时间(假设这是你想要做的)。 假设您在12:00创建用户对象,那么这将是您将用户添加到数据库的时间,但是如果您只在12:30点击提交按钮怎么办? 我宁愿选择12:30而不是12:00。