Могу ли я упростить этот C # в моей ViewModel? - PullRequest
0 голосов
/ 11 ноября 2011

В моем коде у меня есть следующее:

    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?

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Способ сделать это будет зависеть от того, сколько логики вы хотите по вашему мнению. Если вы не против какой-то логики, вы можете сделать что-то вроде этого:

[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), и оба значения будут обновлены.

0 голосов
/ 11 ноября 2011

Если 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 на сервере, который зависит от местоположения сервера.Если вы отображаете эти данные пользователю, вероятно, вы захотите либо (а) указать часовой пояс, либо (б) локализовать время в часовом поясе клиентского компьютера

...