1

MVC3にPOCOエンティティを含む2つのクラスがあります

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

JoinDateProjectでTeamMemberのデフォルト値を設定したいStartDate。誰かが私をこれから引き抜くことができますか

4

3 に答える 3

1

次のように、コントローラーでそれを行うことができます。

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

その場合は、さらにロジックを追加できproject.StartDate == nullますproject.StartDate = DateTime.Now

ただし、モデル自体のデフォルトとしてこれを実行できるかどうかはわかりません。

アップデート

あなたがそれを持っているので、私はProject StartDate見ることができないとTeamMember JoinDate思います、私はあなたが彼らに1対1の関係を与える必要があると思います。私は自分の仕事用システムを使用していないため、正確な構文はわかりませんが、次のようなものが機能するはずです。

    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; }
    }
于 2012-08-10T09:46:54.333 に答える
0

bool、int、stringデータ型に[DefaultValue()]を使用しました。DateTimeで試してみてください。よくわかりませんが、回避策を示しています。

于 2012-10-08T11:46:36.860 に答える
0

TeamMemberクラスのカスタムモデルバインダーが必要なようです。もちろん、これは、TeamMemberの作成時にproject.StartDateにアクセスできることを前提としています。

于 2012-08-10T09:48:34.627 に答える