在我的代码中,我有以下内容:
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的日期吗?
答案 0 :(得分: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)
,两个值都会更新。
答案 1 :(得分: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)将时间本地化为客户端计算机的时区