0

私のコードには次のものがあります:

    viewModel.Note.Modified = DateTime.Now;
    viewModel.Note.ModifiedBy = User.Identity.Name;

そして私の見解では:

    [DisplayName("Modified")]
    public DateTime Modified { get; set; }
    [DisplayName("Modified By")]
    public string ModifiedBy { get; set; }

コードをModifiedByに変更してから、ViewModelで実行され、Modified byが変更されたときにModifiedの日付を変更するコードを作成できますか?

4

2 に答える 2

1

これを行う方法は、ビューに必要なロジックの量によって異なります。いくつかのロジックを気にしない場合は、次のようにすることができます。

[DisplayName("Modified")]
public DateTime Modified { get; set; }

private string m_ModifiedBy
[DisplayName("Modified By")]
public string ModifiedBy { 
    get { return m_ModifiedBy; }
    set{ m_ModifiedBy = value; Modified = DateTime.Now; }
}

ViewModel にロジックが必要な場合は、次のようにすることができます (viewModel がクラス変数であると仮定します)。

public void SetModifiedBy(string modifiedBy) {
    viewModel.Note.Modified = DateTime.Now;
    viewModel.Note.ModifiedBy = modifiedBy;
}

次に、呼び出すだけでSetModifiedBy(User.Identity.Name)、両方の値が更新されます。

于 2011-11-11T02:57:17.910 に答える
0

viewModel.Noteがインスタンスへの参照である場合NoteViewModel、次を使用できます。

public class NoteViewModel{    
    private DateTime? m_Modified;
    private string m_ModifiedBy;

    // note that you do not need the DisplayNameAttribute, because the default 
    // display name is the property name
    public DateTime Modified { 
      get { return m_Modified ?? DateTime.Now; } 
    }

    [DisplayName("Modified By")]
    public string ModifiedBy {
      get { return m_ModifiedBy ?? string.Empty; }
      set { 
        if(value!=null) {
            m_ModifiedBy = value;
            m_Modified = DateTime.Now;       
        }
      }
    } 
}

次に、「コード」(コントローラーを意味していると思いますか?)で、次のことができます。

 viewModel.Note.ModifiedBy = User.Identity.Name;

意図した結果が得られます。

補足:DateTime.UtcNowアプリケーションの対象者によっては、ローカライズ目的での 使用を検討する必要がある場合があります。DateTime.Nowサーバーの場所に依存する、サーバー上の現在の DateTime を返します。このデータをユーザーに表示する場合は、(a) タイム ゾーンを指定するか、(b) クライアント マシンのタイム ゾーンに合わせて時刻をローカライズする必要があります。

于 2011-11-11T03:13:36.530 に答える