Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在MVC4中为ViewModel设置默认值?_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 如何在MVC4中为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

我有一个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; }

    }
公共类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();
            }