Asp.net mvc 如何在MVC4中为ViewModel设置默认值?
我有一个viewModel,其中包含以下内容:Asp.net mvc 如何在MVC4中为ViewModel设置默认值?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我有一个viewModel,其中包含以下内容: public class CreateCardViewModel { [HiddenInput(DisplayValue = false)] public int SetId { get; set; } [Required] public IList<Side> Sides { get; set; } [Required] pub
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; }
}
公共类CreateCardViewModel
{
[HiddenInput(DisplayValue=false)]
public int SetId{get;set;}
[必需]
公共IList边{get;set;}
[必需]
公共整数阶段{get;set;}
[必需]
[数据类型(DataType.Date)]
[HiddenInput(DisplayValue=false)]
public DateTime DateCreated{get;set;}
[必需]
公共bool已就绪{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; }
}
公共类卡
{
公共虚拟整数CardId{get;set;}
//属于一组
公共虚拟int SetId{get;set;}
公共虚拟集集{get;Set;}
//有侧重点
公共虚拟IList边{get;set;}
//在某个阶段
公共虚拟整数阶段{get;set;}
//准备好学习了吗
公共虚拟bool已就绪{get;set;}
公共虚拟日期时间DateCreated{get;set;}
}
如何设置DateCreated的默认值
如果我想在创建卡片时将空白的一面插入侧面,方法会改变吗 您可以在构造函数中设置默认值:
public CreateCardViewModel()
{
DateCreated = DateTime.Now;
Sides = new List<Side> { new Side() };
}
然后,您的构造函数代码变为:
public CreateCardViewModel()
{
DateCreated = SystemTime.Now();
Sides = new List<Side> { new Side() };
}
我同意SystemTime方法 虽然,我个人不喜欢在构造函数上设置CreatedDate,因为从实例化对象到将其持久化到数据库,可能会有很短的时间间隔。(在这里我假设你肯定是) 您可以使所有域对象从如下接口继承:
public interface ITimeStamped
{
DateTime DateCreated { get; set; }
}
然后在Context类的Commit方法中,我会这样做,为实现接口的所有实体设置日期:
foreach (var entry in ChangeTracker.Entries<ITimeStamped>()
.Where(entry => entry.State == EntityState.Added))
{
entry.Entity.DateCreated = SystemTime.Now();
}
foreach(ChangeTracker.Entries()中的var条目)
.Where(entry=>entry.State==EntityState.Added))
{
entry.Entity.DateCreated=SystemTime.Now();
}
通过这种方式,您可以完全确定,当实体在数据库中持久化时,它是以正确的日期时间存储的
public interface ITimeStamped
{
DateTime DateCreated { get; set; }
}
foreach (var entry in ChangeTracker.Entries<ITimeStamped>()
.Where(entry => entry.State == EntityState.Added))
{
entry.Entity.DateCreated = SystemTime.Now();
}