1

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

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

我得到错误:

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

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

4

4 回答 4

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; } }
}
于 2012-04-06T06:24:24.987 回答
2

你可以在你的模型类中试试这个:

private DateTime _joined = DateTime.Now;
public DateTime Joined 
{
  get { return _joined; }
  set { _joined = value; }
}
于 2012-04-06T06:22:25.500 回答
2

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

private DateTime _joined = DateTime.Now;
public DateTime Joined 
{
  get { 
      return _joined; 
  }
  set { 
      _joined = value; 
  }
}
于 2012-04-06T06:25:52.533 回答
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; }
}

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

于 2012-04-06T07:13:15.493 回答