我有一个viewModel包含以下内容:
public class CreateCardViewModel
{
[HiddenInput(DisplayValue = false)]
public int SetId { get; set; }
[Required]
public IList<Side> Sides { get; set; }
[Required]
public int Stage { get; set; }
[Required]
[DataType(DataType.Date)]
[HiddenInput(DisplayValue = false)]
public DateTime DateCreated { get; set; }
[Required]
public bool IsReady { get; set; }
}
该模型如下:
public class Card
{
public virtual int CardId { get; set; }
// belongs to a Set
public virtual int SetId { get; set; }
public virtual Set Set { get; set; }
// has Sides
public virtual IList<Side> Sides { get; set; }
// is in a certain Stage
public virtual int Stage { get; set; }
// is ready to study
public virtual bool IsReady { get; set; }
public virtual DateTime DateCreated { get; set; }
}
如何设置DateCreated的默认值?
如果要在创建卡片时将空白的Side插入Sides中,方法会改变吗?
最佳答案
您可以在构造函数中设置默认值:
public CreateCardViewModel()
{
DateCreated = DateTime.Now;
Sides = new List<Side> { new Side() };
}
警告:从单元测试的角度来看,使用
DateTime.Now
存在一个问题。如果您正在对ViewModel的创建进行单元测试,并且需要能够验证创建的日期是否设置为已知值,则可以考虑创建一个单独的时间概念,如Ayende's blog中所述。您基本上可以创建一个静态函数SystemTime
,您可以在测试中将其设置为一个已知值。如果未设置,则默认为DateTime.Now
:public static class SystemTime
{
public static Func<DateTime> Now = () => DateTime.Now;
}
然后,您的构造函数代码将变为:
public CreateCardViewModel()
{
DateCreated = SystemTime.Now();
Sides = new List<Side> { new Side() };
}
如果需要将时间实际设置为已知值,请执行以下操作:
SystemTime.Now = () => new DateTime(2013, 2, 11, 17, 41, 12);
关于asp.net-mvc - 在MVC4中为ViewModel设置默认值的适当方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817114/