MVC3中的默认属性值

时间:2012-08-10 09:38:03

标签: asp.net-mvc-3 validation data-annotations model-validation

我在MVC3中有2个包含POCO实体的类

public class TeamMember 
{
  public DateTime JoinDate { get; set; }
  [Required]
  Public string Name{ get; set; }
} 

public class Project
{
   [Required]
   public string Name { get; set; }  
   public DateTime StartDate { get; set; }
}

我想使用项目JoinDate设置团队成员StartDate的默认值。 任何人都可以把我拉出来吗

3 个答案:

答案 0 :(得分:2)

您可以在控制器中执行此操作,例如:

if(teamMember.JoinDate == null)
{
    teamMember.JoinDate = project.StartDate;
}

如果project.StartDate == null然后project.StartDate = DateTime.Now,您可以添加更多逻辑。

我不确定你是否可以在模型中将其作为默认设置。

<强>更新

如果你有,我认为Project StartDate可以看到TeamMember JoinDate,我想你需要给他们一对一的关系。我不确定确切的语法,因为我不在我的工作系统上,但这样的事情应该有效:

    public class TeamMember 
    {
      public DateTime JoinDate
      { 
          get { return this.JoinDate; }
          set { JoinDate = this.Project.StartDate; }
      }
      [Required]
      public string Name{ get; set; }
      public virtual Project Project { get; set; }
    } 

    public class Project
    {
       [Required]
       public string Name { get; set; }  
       public DateTime StartDate { get; set; }
    }

更新2

考虑到这一点,你需要允许JoinDate为null,否则它会抛出验证错误,然后你需要检查它是否有值。更像是这样:

    public class TeamMember 
    {
      public DateTime? JoinDate
      { 
          get { return this.JoinDate; }
          set
          {
              if(JoinDate == null)
              {
                  JoinDate = this.Project.StartDate;
              }
              else
              {
                  JoinDate = JoinDate;
              }
          }
      }
      [Required]
      public string Name{ get; set; }
      public virtual Project Project { get; set; }
    }

答案 1 :(得分:0)

听起来你需要TeamMember类的自定义模型绑定器。当然,这假设您在创建TeamMember时可以访问project.StartDate。

答案 2 :(得分:0)

我已将[DefaultValue()]用于bool,int,字符串数据类型。尝试使用DateTime,我不确定,但只是给你解决方法。